SpringBootWeb极速入门-请求参数解析(02)

这一章节,我们将使用spring boot实现常见的请求参数处理

首先,我们需要创建一个spring boot web项目,项目创建请参考juejin.cn/post/732973...

简单参数

简单参数通常是指基本数据类型(如String、int、double等)的值,如get请求中的query参数。

我们实现一个简单的get请求:http://localhost:8080/simpleParam?name=张三&age=18 ,这个接口返回值为"hello get 的请求!"

原始方式

在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。(了解即可)

代码如下:

java 复制代码
package com.shixiaoshi.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
public class RequestController {
    // 原始方式
    @RequestMapping("/simpleParam")
    public  String simpleParam(HttpServletRequest request){
        // 获取请求参数
        String name = request.getParameter("name");
        String ageStr = request.getParameter("age");
        int age = Integer.parseInt(ageStr);

        System.out.println("name:"+name + "age:" + age);

        return "hello get 请求!";
    }
}

上述代码是一个控制器类,用于处理HTTP请求,使用了java的注解写法。

  • @RestController:这个注解标记类为一个REST控制器。当一个类被注解为@RestController时,Spring会为该类自动配置一个requestMapping的处理器。
  • @RequestMapping("/simpleParam"):这个注解映射HTTP请求到simpleParam方法。/simpleParam是一个URL路径,当用户发送GET请求到该路径时,该方法会被调用。

我们在postman中请求这个接口测试一下:

这种方式非常繁琐,还要手动进行类型转换,所以不建议。

Spring Boot方式

这种方式参数名形参名相同,定义形参即可接受参数

java 复制代码
package com.shixiaoshi.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    // 原始方式
    @RequestMapping("/simpleParam")
    // 基于spring boot方式
    public String simpleParam(String name,Integer age){
        System.out.println("name:"+name + "age:" + age);
        return "请求完成!";
    }
}

对于简单参数,get请求和post请求的代码是一样的

如图,我们将get请求改为了post,程序一样是可以正常打印的。

形参名称更改

使用spring boot的形式,请求参数名和方法的形参名称必须相同

如果想更改形参名称,可以使用@RequestParam完成映射

java 复制代码
@RestController
public class RequestController {
    // 原始方式
    @RequestMapping("/simpleParam")
    // 基于spring boot方式
    public String simpleParam(@RequestParam(name = "name") String userName, Integer age){
        System.out.println("name:"+userName+ "age:" + age);
        return "请求完成!";
    }
}

@RequestParam 是Spring MVC框架中的一个注解,用于将HTTP请求参数绑定到方法的参数上。它通常用于处理GET和POST请求。

其语法如下

java 复制代码
@RequestParam(name = "name",required = true)

required是其第二个参数,默认值为required = true,意味着,接口请求时必须传name属性,否则报错

如图,我们删除name参数,请求就会报错。

实体参数

简单实体参数

请求参数名与形参对象属性名相同,定义POJO接受接口。

POJO是指一个普通的Java对象,通常用于表示实体对象数据模型。POJO通常包含一组属性和相应的getter和setter方法,用于访问和修改这些属性的值。

我们依旧以 http://localhost:8080/simpleParam?name=张三&age=18 为例

定义一个User类及需要解析的參數

引入即可

JSON参数

日常开发中,JSON参数是最常见的一种POST请求形式之一。我们来实现如下接口:

我们使用 @RequestBody注解来声明请求类型,使用一个实体类User来接收body请求体。

User实体类

java 复制代码
package com.shixiaoshi.pojo;

public class User {
    private String name;
    private Integer age;

    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

在这个类中,我们通过将数据成员(name、age和address)定义为私有(private),并只提供公共的getter和setter方法,使得User类的内部状态对外部是不可见的。这是一种封装性的体现,有助于保护数据不被外部随意修改。toString的重写,便于在RequestController类中打印该类时,输出更有意义的内容。

Address实体类

java 复制代码
package com.shixiaoshi.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + ''' +
                ", city='" + city + ''' +
                '}';
    }
}
相关推荐
自进化Agent智能体20 小时前
Hermes CLI 界面详解——命令行交互全攻略
后端
1点东西20 小时前
做了个AI日志平台,零代码接入,嘎嘎好用
后端·aigc·自动化运维
程序员AI工坊20 小时前
Agent 开发:ReAct 循环与工具调用实战——从单次调用到自主 Agent
人工智能·后端·python·langchain·agent·react
不爱说话郭德纲21 小时前
我只给了 TRAE Work 一张差评截图,它最后却把自己的 P0 结论推翻了?
前端·后端·架构
tech讯息21 小时前
企业做视频生成,应该选择哪些云上多模态模型平台,以平衡模型质量、可控性和推理成本?AWS 分层选型路径
后端
潇客21 小时前
前端第一次写 Node 服务:一个请求到底经历了什么?
后端
后除21 小时前
Debian 安装与使用 Certbot
后端·nginx·https
小林敲代码77881 天前
Spring Boot 3 升级踩坑:aj-captcha 行为验证码底图加载失效
java·spring boot·后端
雪碧5131 天前
基于afsim的训练多个智能体算法控制(持续关注和收藏后续会同步整个源码包)
后端
保加利亚的风1 天前
Docker 学习文档(Mac + Docker Desktop 版)
前端·后端