我通过Spring Boot 1.2使用Spring MVC并试图了解请求主体如何绑定到容器中的域模型bean。到目前为止,我的理解是:
RequestMappingHandlerMapping
使用@RequestMapping
- @Controller
的带注释的方法,并将其用于到达DispatchServlet
的请求。RequestMappingHandlerAdapter
处理将必要的参数注入这些方法。RequestMappingHandlerAdapter
配备了RequestResponseBodyMethodProcessor
来处理处理请求和响应正文,而处理请求和响应正文又拥有MappingJackson2HttpMessageConverter
,而ObjectBinder
依次拥有执行该处理请求的杰克逊DataBinder
我的域对象的实际反序列化/序列化。但我对这些对象的角色以及Chapter 7 of the Spring documentation: "Validation, Data Binding, and Type Conversion"中描述的对象感到困惑。 具体而言,我并不完全了解BindingResult
和ObjectMapper
如何与杰克逊@RestController
及其结果进行对比。
例如,假设我有以下@RequestMapping(method = POST)
public MyBean postMyBean(@RequestBody @Valid MyBean myBean, BindingResult result) {
return myBean;
}
方法:
@RequestBody
MappingJackson2HttpMessageConverter
,MyBean
用于将请求正文转换为BindingResult
个对象。如果由于JSON字符串中的未知字段而失败,BindingResult
是否会收到此信息?DataBinder
报告哪些数据绑定过程(如果不是JSON-> Bean数据绑定)? DataBinder
如何影响所有这些? BindingResult
和{{1}}是否与使用JSR-303正交?答案 0 :(得分:2)
@RequestBody
,MappingJackson2HttpMessageConverter
用于将请求正文变为MyBean对象。如果由于JSON字符串中的未知字段而失败,BindingResult
是否会收到此信息?BindingResult
报告哪些数据绑定过程(如果不是JSON-> Bean数据绑定)?BindingResult
包含验证结果。如果您使用@Valid
注释了bean,然后使用BindingResult
作为方法参数,那么将使用基于JSR 303的验证程序或使用您可能已注册的bean的任何自定义验证程序验证该bean @RequestBody
带注释的方法来说,它不那么重要,转换器会起作用,但它用于验证过去的转换。DataBinder
和BindingResult
是否与使用JSR-303正交?DataBinder
进行,验证错误被捕获到BindingResult
。