Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC中,bean反序列化和验证所涉及的对象之间的关系是什么?_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 在SpringMVC中,bean反序列化和验证所涉及的对象之间的关系是什么?

Java 在SpringMVC中,bean反序列化和验证所涉及的对象之间的关系是什么?,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我正在通过SpringBoot1.2使用SpringMVC,并试图了解如何将请求主体绑定到容器中的域模型bean。以下是我到目前为止的大致理解: RequestMappingHandlerMapping接受我的@Controller的@RequestMapping注释方法,并使它们可用于到达DispatchServlet的请求 根据方法的参数类型和注释,RequestMappingHandlerAdapter处理向这些方法中注入必要的参数 RequestMappingHandlerAdapte

我正在通过SpringBoot1.2使用SpringMVC,并试图了解如何将请求主体绑定到容器中的域模型bean。以下是我到目前为止的大致理解:

  • RequestMappingHandlerMapping
    接受我的
    @Controller
    @RequestMapping
    注释方法,并使它们可用于到达
    DispatchServlet
    的请求
  • 根据方法的参数类型和注释,
    RequestMappingHandlerAdapter
    处理向这些方法中注入必要的参数
  • RequestMappingHandlerAdapter
    配备了一个
    RequestResponseBodyMethodProcessor
    来处理请求和响应主体,它又有
    MappingJackson2HttpMessageConverter
    ,它又有Jackson
    ObjectBinder
    ,执行与我的域对象之间的实际反序列化/序列化
但我对这些对象的角色和中描述的对象感到困惑具体来说,我不太明白
DataBinder
BindingResult
是如何与Jackson
ObjectMapper及其结果进行交互的

例如,假设我有以下
@RestController
方法:

@RequestMapping(method = POST)
public MyBean postMyBean(@RequestBody @Valid MyBean myBean, BindingResult result) {
    return myBean;
}
  • 由于
    @RequestBody
    映射jackson2httpmessageconverter
    用于将请求主体转换为
    MyBean
    对象。如果由于JSON字符串中的未知字段而失败,
    BindingResult
    是否会包含此信息
  • 如果不是JSON->Bean数据绑定,那么使用
    BindingResult
    报告什么数据绑定过程
  • DataBinder
    是如何考虑到这一切的
  • DataBinder
    BindingResult
    是否与使用JSR-303正交
      • Q:由于
        @RequestBody
        映射jackson2httpmessageconverter
        用于将请求主体转换为MyBean对象。如果由于JSON字符串中的未知字段而失败,
        BindingResult
        是否会包含此信息
      • A:否,如果转换器抛出异常,该异常将作为4xx错误传播回用户。首先使用转换器转换JSON,然后使用绑定器/验证器验证转换后的bean

      • Q:如果不是JSON->Bean数据绑定,那么将使用
        BindingResult
        报告什么数据绑定过程
      • A
        BindingResult
        保存验证结果。如果您使用
        @Valid
        注释bean,然后使用
        BindingResult
        作为方法参数,那么将使用基于JSR303的验证器或您可能已注册的bean的任何自定义验证器对bean进行验证

      • Q:DataBinder是如何融入所有这些因素的
      • A:Databinder用于绑定和验证bean(以及注册绑定器和验证器)。对于绑定
        @RequestBody
        带注释的方法来说,它不太重要,因为转换器起作用,但它用于验证过去的转换

      • Q:使用JSR-303时,
        DataBinder
        BindingResult
        是否正交
      • A:否,JSR-303验证通过
        DataBinder
        进行,验证错误捕获到
        BindingResult

      在以下位置找到此项:“可以用
      @Valid
      注释
      @RequestBody
      方法参数,在这种情况下,将使用配置的验证器实例对其进行验证。”。当使用MVC名称空间或MVC Java配置时,假设类路径上有JSR-303实现,则会自动配置JSR-303验证器。“谢谢。因此,就与
      @RequestBody
      的绑定而言,
      Converter
      s和
      DataBinder
      是正交的,因为
      DataBinder
      只执行验证,而绑定发生在
      转换器中,这是一个公平点-转换器和数据绑定器可以被认为是正交的,特别是对于
      @RequestBody
      情况