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注解在提交复杂表单时非常有用。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/85213171