【发布时间】:2017-05-01 09:11:28
【问题描述】:
为了在 Spring MVC 应用程序中捕获/数据绑定 HTTP 请求的 body,我是否理解正确...
@RequestBody
对于编码为application/json的请求?
@PostMapping(consumes = "application/json")
public String handleUpload( @RequestBody UploadCommand command ) {
// ...
}
@ModelAttribute
对于编码为x-www-form-urlencoded 或multipart/form-data 的请求?
@PostMapping(consumes = "multipart/form-data")
public String handleUpload( @ModelAttribute UploadCommand command ) {
// ...
}
问题:
为什么Spring需要这两个不同的注解?
这些注释还有其他用例吗?
注意: 在挖掘之后:这个stackoverflow答案详细阐述了@ModelAttribute: @ModelAttribute annotation, when to use it?
【问题讨论】:
-
因为两者是完全不同的野兽。从 JSON 创建对象与从请求参数绑定完全不同。因此不同的注释。
-
@M. Deinum url (?..) 的查询部分是否也可以与 ModelAttribute 映射(到单个对象中)?
-
这就是
@ModelAttribute的全部意义所在。可以是查询或表单参数。 -
@ModelAttribute对数据绑定没有任何作用。您可以删除此注释,但无论如何数据都会被绑定。@ModelAttribute只需检查标记的对象是否已经在模型中,如果没有则创建新的。 -
最大的区别是
@RequestBody使用messageConverter和@ModelAttribute不使用。
标签: spring spring-mvc data-binding annotations