@Data@AllArgsConstructor@NoArgsConstructorpublic class Student {private String name;private Integer age;}
@RestController@RequestMapping("/student")public class StudentController {@GetMapping("/test1")public String test1(String name, Integer age) {return name + " : " + age;}@GetMapping("/test2")public String test2(@RequestParam("name") String username, Integer age) {return username + " : " + age;}@GetMapping("/test3/{name}/{age}")public String test3(@PathVariable String name, @PathVariable Integer age) {return name + " : " + age;}@GetMapping("/test4/{username}/{age}")public String test4(@PathVariable("username") String name, @PathVariable Integer age) {return name + " : " + age;}@PostMapping("/test5")public String test5(String name, Integer age) {return name + " : " + age;}@PostMapping("/test6")public Student test6(Student student) {return student;}@PostMapping("/test7")public Student test7(@RequestBody Student student) {return student;}}
一 post请求可以不加@RequestBody注解么?使用与不使用@RequestBody注解的区别
- 添加@RequestBody注解
@RequestBody只能处理json格式的数据。使用@RequestBody注解时,用于接收Content-Type为application/json类型的请求,数据类型是JSON:{“aaa”:“111”,“bbb”:“222”} - 不添加@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的区别
- form-data
等价于http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息。由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。 - x-www-form-urlencoded
等价于http请求中的application/x-www-from-urlencoded,会将表单内的数据转换为键值对,
如,grant_type=authorization_code&code=Z7cOp8&client_id=client1 - raw
可以上传任意格式的文本,可以上传text、json、xml、html等。 - binary
相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据。通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。