这一章节,我们将使用spring boot实现常见的请求参数处理。
首先,我们需要创建一个spring boot web项目,项目创建请参考往前文章。
简单参数
简单参数通常是指基本数据类型(如String、int、double等)的值,如get请求中的query参数。
我们实现一个简单的get请求:http://localhost:8080/simpleParam?name=张三&age=18 ,这个接口返回值为“hello get 请求!”
原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。(了解即可)
代码如下:
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方式
这种方式参数名与形参名相同,定义形参即可接受参数
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完成映射
@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请求。
其语法如下
@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实体类
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实体类
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 + '\'' +
'}';
}
}