在 Spring MVC 中,使用注解 @RequestMapping
修饰控制器时,其所配置的内容,会在工程的启动阶段保存到处理器映射(HandlerMapping)机制中,当请求连接被拦截后,HandlerMapping
进行匹配,会将对应的处理器和拦截器保存到 HandlerExecutionChain
对象中,并返回给 DispatcherServlet
运行。
处理器中包含了控制器,在执行控制器中匹配的方法前,需要先将请求报文中的参数转换为控制器所需要的参数。
-
不使用任何注解,控制器的参数名称需要和请求链接中的参数名称保持一致,如此参数可以正常传递,并且控制器的参数默认是可以为空的,所以请求链接中的参数可以是缺省的。
-
当前后端的参数名称不一致时,可以使用
@RequestParam
注解将两者映射起来,并且默认参数是非空的,但是可以使用注解中的required
属性修改参数的必要性。 -
如果控制器的参数是数组,那么请求链接中的相应参数中的元素可以直接使用逗号分隔,如
http://127.0.0.1/testArray?value=1,2,3
。 -
使用
@RequestBody
注解修饰控制器的参数,从而可以获取请求报文体中的 JSON 参数。 -
使用
@PathVariable
注解获取请求链接路径中的参数,这个需要修饰控制器方法的注解使用{<参数名称>}
占位符表明参数的位置和名称。 -
对于日期和数字,可以使用
@DateTimeFormat
和@NumberFormat
进行修饰,从而指定控制器参数的格式。 -
如果需要,可以自定义参数转换规则。
如同使用
@RequestBody
修饰了参数的控制器,处理器会调用HttpMessageConverter
接口中声明的方法对请求体信息进行转换。Spring MVC 中声明了三个接口来实现各种参数的转换,分别如下:
- Converter,普通转换器,可以转换字符串,数字等简单类型的参数
- Formatter,格式化转换器,可以格式化日期,数字等参数
- GenericConverter,数组转换器,可以将请求中的参数转换为数组
在 Spring Boot 中,自动配置类
WebMvcAutoConfiguration
中的WebMvcAutoConfigurationAdapter
内部类,会自动将上面三种类型的 Bean 注册到服务类中。所以,只要实现上面的几个接口,就可以自定义自己的参数转换器。