Spring Boot 参数转换

在 Spring MVC 中,使用注解 @RequestMapping 修饰控制器时,其所配置的内容,会在工程的启动阶段保存到处理器映射(HandlerMapping)机制中,当请求连接被拦截后,HandlerMapping 进行匹配,会将对应的处理器和拦截器保存到 HandlerExecutionChain 对象中,并返回给 DispatcherServlet 运行。

处理器中包含了控制器,在执行控制器中匹配的方法前,需要先将请求报文中的参数转换为控制器所需要的参数。

  1. 不使用任何注解,控制器的参数名称需要和请求链接中的参数名称保持一致,如此参数可以正常传递,并且控制器的参数默认是可以为空的,所以请求链接中的参数可以是缺省的。

  2. 当前后端的参数名称不一致时,可以使用 @RequestParam 注解将两者映射起来,并且默认参数是非空的,但是可以使用注解中的 required 属性修改参数的必要性。

  3. 如果控制器的参数是数组,那么请求链接中的相应参数中的元素可以直接使用逗号分隔,如 http://127.0.0.1/testArray?value=1,2,3

  4. 使用 @RequestBody 注解修饰控制器的参数,从而可以获取请求报文体中的 JSON 参数。

  5. 使用 @PathVariable 注解获取请求链接路径中的参数,这个需要修饰控制器方法的注解使用 {<参数名称>} 占位符表明参数的位置和名称。

  6. 对于日期和数字,可以使用 @DateTimeFormat@NumberFormat 进行修饰,从而指定控制器参数的格式。

  7. 如果需要,可以自定义参数转换规则。

    如同使用 @RequestBody 修饰了参数的控制器,处理器会调用 HttpMessageConverter 接口中声明的方法对请求体信息进行转换。

    Spring MVC 中声明了三个接口来实现各种参数的转换,分别如下:

    • Converter,普通转换器,可以转换字符串,数字等简单类型的参数
    • Formatter,格式化转换器,可以格式化日期,数字等参数
    • GenericConverter,数组转换器,可以将请求中的参数转换为数组

    在 Spring Boot 中,自动配置类 WebMvcAutoConfiguration 中的 WebMvcAutoConfigurationAdapter 内部类,会自动将上面三种类型的 Bean 注册到服务类中。所以,只要实现上面的几个接口,就可以自定义自己的参数转换器。

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页