@Data@AllArgsConstructor@NoArgsConstructorpublic class Student {private String name;private Integer age;}
@RestController@RequestMapping("/student")public class StudentController {//localhost:8080/student/test1?name=lxx&age=11@GetMapping("/test1")public String test1(String name, Integer age) {return name + " : " + age;}//localhost:8080/student/test2?name=lxx&age=11@GetMapping("/test2")public String test2(@RequestParam("name") String username, Integer age) {return username + " : " + age;}//localhost:8080/student/test3/lxx/11@GetMapping("/test3/{name}/{age}")public String test3(@PathVariable String name, @PathVariable Integer age) {return name + " : " + age;}//localhost:8080/student/test4/lxx/11@GetMapping("/test4/{username}/{age}")public String test4(@PathVariable("username") String name, @PathVariable Integer age) {return name + " : " + age;}// 在postman中://(1) 该接口可以通过 query params 传参 localhost:8080/student/test5?name=lxx&age=11//(2) 该接口可以通过body的form-data传参 name=lxx age=11// 此时 Content-Type=multipart/form-data; boundary=//(3) 该接口可以通过body的x-www-form-urlencoded传参 name=lxx age=11// 此时 Content-Type=application/x-www-form-urlencoded@PostMapping("/test5")public String test5(String name, Integer age) {return name + " : " + age;}// 在postman中://(1) 该接口可以通过 query params 传参 localhost:8080/student/test6?name=lxx&age=11//(2) 该接口可以通过body的form-data传参 name=lxx age=11// 此时 Content-Type=multipart/form-data; boundary=//(3) 该接口可以通过body的x-www-form-urlencoded传参 name=lxx age=11// 此时 Content-Type=application/x-www-form-urlencoded@PostMapping("/test6")public Student test6(Student student) {return student;}//不可以通过query params 传参;//不支持body的form-data传参//不支持body的x-www-form-urlencoded传参//只能处理json格式的数据,Content-Type=application/json//在postman中: 通过body的row,数据类型为JSON:{"name":"lxx","age":11}@PostMapping("/test7")public Student test7(@RequestBody Student student) {return student;}}

一 post请求可以不加@RequestBody注解么?使用与不使用@RequestBody注解的区别

  1. 添加@RequestBody注解
    @RequestBody只能处理json格式的数据。使用@RequestBody注解时,用于接收Content-Type为application/json类型的请求,数据类型是JSON:{“aaa”:“111”,“bbb”:“222”}
  2. 不添加@RequestBody注解
    不加@RequestBody可以支持表单的默认格式,但是不能处理json格式的数据(在restTemplete进行远程服务调用时,是以json格式进行实体类传参的)。
    说明:不使用@RequestBody注解时,可以接收Content-Type为application/x-www-form-urlencoded类型的请求所提交的数据,数据格式:aaa=111&bbb=222。form表单提交以及jQuery的$.post()方法所发送的请求就是这种类型。

二 postman中post请求body部分的form-data、x-www-form-urlencoded、raw、binary的区别

  1. form-data
    等价于http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息。由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
  2. x-www-form-urlencoded
    等价于http请求中的application/x-www-from-urlencoded,会将表单内的数据转换为键值对,
    如,grant_type=authorization_code&code=Z7cOp8&client_id=client1
  3. raw
    可以上传任意格式的文本,可以上传text、json、xml、html等。
  4. binary
    相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据。通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。