本文共 5010 字,大约阅读时间需要 16 分钟。
和解释了Spring MVC的特殊bean以及该使用的默认实现DispatcherServlet
。在本节中,您将了解配置Spring MVC的两种其他方法。即MVC Java配置和MVC XML命名空间。
MVC Java配置和MVC命名空间提供了类似的默认配置,可以覆盖DispatcherServlet
默认配置。目标是使大多数应用程序不必创建相同的配置,并提供更高级别的构造,用于配置作为简单起始点的Spring MVC,并且需要很少或根本没有底层配置的知识。
您可以根据自己的喜好选择MVC Java配置或MVC命名空间。另外,您将在下面进一步看到,使用MVC Java配置,可以更容易地查看底层配置,以及直接对创建的Spring MVC bean进行细粒度的自定义。但是让我们从一开始就开始。
要启用MVC Java配置,请将注释添加@EnableWebMvc
到您的一个 @Configuration
类中:
@Configuration @EnableWebMvc public class WebConfig {}
要在XML中实现相同的使用mvc:annotation-driven
DispatcherServlet上下文中的元素(如果您没有定义DispatcherServlet上下文,则在根上下文中):
<?xml version =“1.0”encoding =“UTF-8”?>
在上述寄存器一RequestMappingHandlerMapping
,一个RequestMappingHandlerAdapter
,和ExceptionHandlerExceptionResolver
在支持带注释控制器方法的处理请求(等等)使用注释诸如@RequestMapping
, @ExceptionHandler
和其他。
它还支持以下功能:
@NumberFormat
通过注释ConversionService
。Date
,Calendar
,Long
,和乔达时间使用的字段 @DateTimeFormat
注解。@Controller
输入@Valid
,如果JSR-303提供程序存在于类路径中。HttpMessageConverter
支持@RequestBody
方法参数和@ResponseBody
方法返回值@RequestMapping
或@ExceptionHandler
方法。
这是由mvc设计的HttpMessageConverters的完整列表:annotation-driven:
ByteArrayHttpMessageConverter
转换字节数组。StringHttpMessageConverter
转换字符串。ResourceHttpMessageConverter
转换为/从 org.springframework.core.io.Resource
为所有媒体类型。SourceHttpMessageConverter
转换到/从a javax.xml.transform.Source
。FormHttpMessageConverter
将表单数据转换为/从a转换MultiValueMap<String, String>
。Jaxb2RootElementHttpMessageConverter
将Java对象转换为/从XML中添加 – 如果存在JAXB2,并且类别路径中不存在Jackson 2 XML扩展名。MappingJackson2HttpMessageConverter
转换为/从JSON中添加,如果杰克逊2存在于类路径。MappingJackson2XmlHttpMessageConverter
转换为/从XML中添加,如果 存在于类路径中。MappingJackson2SmileHttpMessageConverter
转换为/从微笑(二进制JSON) – 添加如果 存在于类路径。MappingJackson2CborHttpMessageConverter
转换为/从CBOR – 添加如果 存在于类路径。AtomFeedHttpMessageConverter
转换Atom Feed – 如果罗马存在于类路径中则添加。RssChannelHttpMessageConverter
转换RSS提要 – 如果罗马存在于类路径中,则会添加。有关如何自定义这些默认转换器的更多请参见。
使用ObjectMapper 创建的实例创建 Jackson JSON和XML转换器 ,以提供更好的默认配置。此构建器使用以下命令自定义Jackson的默认属性:
如果在类路径中检测到它们,它也会自动注册以下众所周知的模块:
|
要定制Java中的默认配置,您只需实现该 WebMvcConfigurer
接口,或者更有可能扩展该类WebMvcConfigurerAdapter
并覆盖所需的方法:
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { //覆盖配置方法...}
要自定义默认配置,<mvc:annotation-driven/>
检查它支持哪些属性和子元素。您可以查看 或使用IDE的代码完成功能来发现哪些属性和子元素可用。
默认情况下,已安装格式化程序Number
和Date
类型,包括对@NumberFormat
和@DateTimeFormat
注释的支持。如果Joda时间存在于类路径上,则还将完全支持Joda Time格式化库。要注册自定义格式化程序和转换器,请覆盖该addFormatters
方法:
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addFormatters(FormatterRegistry registry){ //添加格式化程序和/或转换器 }}
在MVC命名空间<mvc:annotation-driven>
中,添加相同的默认值。注册自定义格式化器和转换器只需提供一个ConversionService
:
<?xml version =“1.0”encoding =“UTF-8”?><豆 id="“conversionService”" 类="“org.springframework.format.support.FormattingConversionServiceFactoryBean”"> <属性 名="“转换器”"> <设定> <豆 类="“org.example.MyConverter”" /> 设定> < / property> 属性> 豆>
参见和FormattingConversionServiceFactoryBean 关于何时使用FormatterRegistrars更多的信息。 |
Spring提供了一个,可用于在应用程序的所有层中进行验证。在Spring MVC中,您可以将其配置为用作全局Validator
实例,以在遇到@Valid
或@Validated
控制器方法参数时使用,和/或Validator
通过@InitBinder
方法作为控制器中的本地 使用。可以组合全局和本地验证器实例以提供复合验证。
Spring还 Bean验证,通过LocalValidatorFactoryBean
它可以将Spring org.springframework.validation.Validator
界面适应Bean验证javax.validation.Validator
合同。这个类可以插入Spring MVC作为下面描述的全局验证器。
默认情况下,通过在类路径中检测到一个Bean验证提供程序(如Hibernate Validator)时,可以在Spring MVC中使用@EnableWebMvc
或<mvc:annotation-driven>
自动注册Bean验证支持LocalValidatorFactoryBean
。
有时,将LocalValidatorFactoryBean 注入到控制器或其他类中是很方便的。最简单的方法是声明自己的@Bean ,并且标记它,@Primary 以避免与MVC Java配置提供的冲突。如果你喜欢使用MVC的Java的配置之一,你需要重写 mvcValidator 的方法WebMvcConfigurationSupport ,并声明明确回报的方法LocalValidatorFactory ,而不是Validator 。有关 如何切换扩展提供的请参见进行。 |
或者,您可以配置自己的全局Validator
实例:
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public Validator getValidator(); { //返回“全局”验证器 }}
和XML:
<?xml version =“1.0”encoding =“UTF-8”?>
要将全局和本地验证结合起来,只需添加一个或多个本地验证器:
@Controller public class MyController { @InitBinder protected void initBinder(WebDataBinder binder){ binder.addValidators(new FooValidator()); }}
使用这个最小配置,任何时候遇到一个@Valid
或@Validated
方法参数,它将被配置的验证器验证。任何验证违规将自动BindingResult
作为方法参数可访问的错误公开,并且也可以在Spring MVC HTML视图中呈现。
您可以配置HandlerInterceptors
或WebRequestInterceptors
应用于所有传入的请求或限制在特定的URL路径模式。
在Java中注册拦截器的示例:
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new LocaleInterceptor()); registry.addInterceptor(new ThemeInterceptor())。addPathPatterns(“/ **”).excludePathPatterns(“/ admin / **”); registry.addInterceptor(new SecurityInterceptor())。addPathPatterns(“/ secure / *”); }}
而在XML中使用<mvc:interceptors>
元素:
转载地址:http://zauwa.baihongyu.com/