您现在的位置是:首页 >技术交流 >04-SpringMVC(补充1)网站首页技术交流

04-SpringMVC(补充1)

是三好 2024-06-17 11:25:06
简介04-SpringMVC(补充1)
@Data
@AllArgsConstructor
@NoArgsConstructor
public 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=<calculated when request is sent>

    //(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=<calculated when request is sent>

    //(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,从字面意思得知,只可以上传二进制数据。通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。