Spring的 RequestBody 和 ResponseBody注解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/neweastsun/article/details/85213171

Spring的 RequestBody 和 ResponseBody注解

本文我们简要讨论下spring两个注解:RequestBody 和 ResponseBody注解。

@RequestBody 注解

@RequestBody注解可以映射httpRequest请求体至域对象,启用自动把httpRequest请求体反序列化为java对象。在实际应用中比如非常复杂的业务表达提交,如主子表嵌套情况。
首先,我们看下spring Controller方法:

@PostMapping("/request")
public ResponseEntity postController(@RequestBody LoginForm loginForm) {
    exampleService.fakeAuthenticate(loginForm);
    return ResponseEntity.ok(HttpStatus.OK);
}

spring自动反序列化json字符串为java类型,但需要通过@RequestBody注解进行说明。下面定义java类:

public class LoginForm {
    private String username;
    private String password;
    // ...
}

我们打算把请求体json映射为该类对象。下面通过curl进行测试:

curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data 
  '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"

当然,也可以使用postman等其他工具进行测试,需要注意的是,指定请求头信息为json,否则会解析错误。

@ResponseBody

@ResponseBody注解告诉controller,返回对象自动序列化为json字符串,并返回至HttpResponse 对象。下面定义一个业务对象:

public class ResponseTransfer {
    private String text; 
     
    // standard getters/setters
}

相应的controller实现:

@Controller
@RequestMapping("/post")
public class ExamplePostController {
 
    @Autowired
    ExampleService exampleService;
 
    @PostMapping("/response")
    @ResponseBody
    public ResponseTransfer postResponseController(
      @RequestBody LoginForm loginForm) {
        return new ResponseTransfer("Thanks For Posting!!!");
     }
}

在浏览器的开发者控制台或类似postman工具,可以看到回来的相应内容:

{"text":"Thanks For Posting!!!"}

需要说明的是,使用@RestController注解时,就不需要指定@ResponseBody,因为默认已经增加该注解。

总结

我们通过示例说明了RequestBody 和 ResponseBody注解的使用,尤其RequestBody注解在提交复杂表单时非常有用。

猜你喜欢

转载自blog.csdn.net/neweastsun/article/details/85213171