文章目录
- 1、java方法入参里面什么注解都没有
 - 2、不使用?&来拼接参数,在参数中添加@PathVariable注解
 - 3、@RequestBody
 
先创建一个springboot项目,并在pom文件中添加web依赖:
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
创建user对象:
public class User {
    private String name;
    private Integer age;
    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;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
 
创建一个controller:
@RestController
@RequestMapping("/store")
public class TestController {
  
}
 
1、java方法入参里面什么注解都没有
/**
     * 第一种:java方法入参里面什么注解都没有
     * */
    @RequestMapping("/noAnnotation")
    public String noAnnotation(User user){
        return user.toString();
    }
 
结果
 
适用于:请求参数比较少
 缺点:请求参数比较多的时候,可能会丢参数,因为get请求有长度限制。
如果参数重复了,比如:http://localhost:8080/store/noAnnotation?age=18&age=20&name=yuanhaoz,参数中age有两个,一个等于18,另一个等于20,如果是int类型的则取最先声明的那个;如果是String类型的,则会叠加
 
2、不使用?&来拼接参数,在参数中添加@PathVariable注解
/**
     * 第二种:不使用?&来拼接参数
     * */
    @RequestMapping("/havaPathVariable/{name}/{age}")
    public String havaPathVariable(@PathVariable(value = "name")String name, @PathVariable(value = "age")int age ){
        return name+age;
    }
 
@PathVariable根据value将url中的参数取出来
结果:
 
适用于:参数比较少,以及动态接口情况
如何改成参数非必传:
 不仅要在@PathVariable()中加required = false,还要设置多个url path,这是因为url要求带参,属于REST参数。
 
 结果:
 
 如果只设置required = false话,是无法请求的。
 
3、@RequestBody
/**
     * 第三种:@RequestBody
     * */
    @RequestMapping("/haveRequestBody")
    public String haveRequestBody(@RequestBody User user){
        return user.toString();
    }
 

结果:
 
 这个注解会从http请求的body当中拿到json,并且反序列化成java对象
 适用于:请求参数非常多(因为body没有长度限制)
 如果参数重复了,无论什么类型取声明的最后一个
 
 解析list怎么写
 body:
 
 controller:
 
 解析嵌套对象怎么写
 body:
 在json中的每个对象里添加一个phone对象
 
创建phone对象(可以根据json中的phone对象创建所有字段,也可设置部分字段)
public class Phone {
    private String name;
    private String code;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Override
    public String toString() {
        return "Phone{" +
                "name='" + name + '\'' +
                ", code='" + code + '\'' +
                '}';
    }
}
 
User中要添加与json中对应的对象,才会将json中的嵌套对象解析出来。
 在user对象中添加phone,并修改tostring方法;
 
 controller:
 
 结果:
 



















