Spring Boot 注解@RequestParam和@RequestBody详情与区别

Spring Boot 注解@RequestParam和@RequestBody详情与区别

  • @RequestBody测试详情(GET与POST)
  • @RequestParam测试详情(GET与POST)

@RequestBody测试详情(GET与POST)

POST测试
代码示例

    @ApiOperation(value = "")
    @PostMapping("/test")
    public DemoTest test(@RequestBody DemoTest demoTest) {
        return demoTest;
    }

Postman测试结果
1.请求方式POST,参数在请求体里
Spring Boot 注解@RequestParam和@RequestBody详情与区别_第1张图片
2.请求方式POST,请求参数放在URL问号后面,结果如下:Spring Boot 注解@RequestParam和@RequestBody详情与区别_第2张图片
如图出现错误,证明对于POST(@RequestBody)参数不能放在问号后面

GET测试
代码示例

    @ApiOperation(value = "")
    @GetMapping("/test1")
    public DemoTest test1(@RequestBody DemoTest demoTest) {
        System.out.println("content:>>>>" + demoTest);
        return demoTest;
    }

Postman测试结果

1.请求方式GET,请求参数放在URL问号后面,结果如下:
Spring Boot 注解@RequestParam和@RequestBody详情与区别_第3张图片
如图出现错误,证明对于GET(@RequestBody)参数不能放在问号后面

2.请求方式GET,参数在请求体里,结果如下:

Spring Boot 注解@RequestParam和@RequestBody详情与区别_第4张图片
如图结果,证明对于GET(@RequestBody)参数可以放在请求体里

总结:对于@RequestBody无论是POST还是GET请求参数只能放在请求体里面,当请求方式为GET(@RequestBody)时,请求参数放在请求体里,服务端也能拿到参数
另:

    @ApiOperation(value = "")
    @PostMapping("/test")
    public DemoTest test(@RequestBody() String content) {
        System.out.println("content:>>>>" + content);
        DemoTest demoTest = new DemoTest(content);
        return demoTest;
    }

上面代码参数放在body也能取到

@RequestParam测试详情(GET与POST)

POST测试
代码示例

    @ApiOperation(value = "")
    @PostMapping("/test")
    public DemoTest test(@RequestParam DemoTest demoTest) {
        System.out.println("content:>>>>" + demoTest);
        return demoTest;
    }

经postman测试上面代码错误,@RequestParam不支持pojo类。修改代码:

    @ApiOperation(value = "")
    @PostMapping("/test")
    public DemoTest test(@RequestParam String content) {
        System.out.println("content:>>>>" + content);
        DemoTest demoTest = new DemoTest(content);
        return demoTest;
    }

参数放到问号后面,能取到值:
Spring Boot 注解@RequestParam和@RequestBody详情与区别_第5张图片
参数放body里,格式为form-data也能取到:
Spring Boot 注解@RequestParam和@RequestBody详情与区别_第6张图片
如果格式为raw报错Required String parameter ‘content’ is not present

GET测试
代码示例

    @ApiOperation(value = "")
    @GetMapping("/test1")
    public DemoTest test1(@RequestParam() String content) {
        System.out.println("content:>>>>" + content);
        DemoTest demoTest = new DemoTest(content);
        return demoTest;
    }

参数放到问号后面,能取到值;参数放body里,格式为form-data不能取到值,格式为raw也不能

总结:@RequestParam放在问号后面,无论GET还是POST都能取到值;当POST放在body里格式为form-data也能取到值,其他(raw等)取不到,而为GET放到body都取不到值

把参数放到header里@RequestParam无论GET还是POST都取不到值

你可能感兴趣的:(Spring Boot 注解@RequestParam和@RequestBody详情与区别)