博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Spring 5 官方文档》18. Web MVC 框架(十)
阅读量:6083 次
发布时间:2019-06-20

本文共 5010 字,大约阅读时间需要 16 分钟。

18.16配置Spring MVC

和解释了Spring MVC的特殊bean以及该使用的默认实现DispatcherServlet。在本节中,您将了解配置Spring MVC的两种其他方法。即MVC Java配置和MVC XML命名空间。

MVC Java配置和MVC命名空间提供了类似的默认配置,可以覆盖DispatcherServlet默认配置。目标是使大多数应用程序不必创建相同的配置,并提供更高级别的构造,用于配置作为简单起始点的Spring MVC,并且需要很少或根本没有底层配置的知识。

您可以根据自己的喜好选择MVC Java配置或MVC命名空间。另外,您将在下面进一步看到,使用MVC Java配置,可以更容易地查看底层配置,以及直接对创建的Spring MVC bean进行细粒度的自定义。但是让我们从一开始就开始。

18.16.1启用MVC Java Config或MVC XML命名空间

要启用MVC Java配置,请将注释添加@EnableWebMvc到您的一个 @Configuration类中:

@Configuration @EnableWebMvc public  class WebConfig {}

要在XML中实现相同的使用mvc:annotation-drivenDispatcherServlet上下文中的元素(如果您没有定义DispatcherServlet上下文,则在根上下文中):

<?xml version =“1.0”encoding =“UTF-8”?> 

在上述寄存器一RequestMappingHandlerMapping,一个RequestMappingHandlerAdapter,和ExceptionHandlerExceptionResolver在支持带注释控制器方法的处理请求(等等)使用注释诸如@RequestMapping, @ExceptionHandler和其他。

它还支持以下功能:

  1. 除了用于数据绑定的JavaBeans PropertyEditor之外,还可以 通过实例进行Spring 3样式类型转换。
  2. 支持使用数字字段@NumberFormat通过注释ConversionService
  3. 支持 DateCalendarLong,和乔达时间使用的字段 @DateTimeFormat注解。
  4. 支持 @Controller输入@Valid,如果JSR-303提供程序存在于类路径中。
  5. HttpMessageConverter支持@RequestBody方法参数和@ResponseBody 方法返回值@RequestMapping@ExceptionHandler方法。

    这是由mvc设计的HttpMessageConverters的完整列表:annotation-driven:

    1. ByteArrayHttpMessageConverter 转换字节数组。
    2. StringHttpMessageConverter 转换字符串。
    3. ResourceHttpMessageConverter转换为/从 org.springframework.core.io.Resource为所有媒体类型。
    4. SourceHttpMessageConverter转换到/从a javax.xml.transform.Source
    5. FormHttpMessageConverter将表单数据转换为/从a转换MultiValueMap<String, String>
    6. Jaxb2RootElementHttpMessageConverter 将Java对象转换为/从XML中添加 – 如果存在JAXB2,并且类别路径中不存在Jackson 2 XML扩展名。
    7. MappingJackson2HttpMessageConverter 转换为/从JSON中添加,如果杰克逊2存在于类路径。
    8. MappingJackson2XmlHttpMessageConverter转换为/从XML中添加,如果 存在于类路径中。
    9. MappingJackson2SmileHttpMessageConverter转换为/从微笑(二进制JSON) – 添加如果  存在于类路径。
    10. MappingJackson2CborHttpMessageConverter转换为/从CBOR – 添加如果  存在于类路径。
    11. AtomFeedHttpMessageConverter 转换Atom Feed – 如果罗马存在于类路径中则添加。
    12. RssChannelHttpMessageConverter 转换RSS提要 – 如果罗马存在于类路径中,则会添加。

有关如何自定义这些默认转换器的更多请参见。

[注意]
使用ObjectMapper创建的实例创建 Jackson JSON和XML转换器 ,以提供更好的默认配置。此构建器使用以下命令自定义Jackson的默认属性:

  1.  被禁用。
  2.  被禁用。

如果在类路径中检测到它们,它也会自动注册以下众所周知的模块:

  1. :支持Java 7类型java.nio.file.Path
  2. :支持Joda-Time类型。
  3. :支持Java 8 Date&Time API类型。
  4. :支持其他Java 8类型Optional

18.16.2定制提供的配置

要定制Java中的默认配置,您只需实现该 WebMvcConfigurer接口,或者更有可能扩展该类WebMvcConfigurerAdapter 并覆盖所需的方法:

@Configuration @EnableWebMvc public  class WebConfig extends WebMvcConfigurerAdapter {	//覆盖配置方法...}

要自定义默认配置,<mvc:annotation-driven/>检查它支持哪些属性和子元素。您可以查看 或使用IDE的代码完成功能来发现哪些属性和子元素可用。

18.16.3转换和格式化

默认情况下,已安装格式化程序NumberDate类型,包括对@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更多的信息。

18.16.4验证

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视图中呈现。

18.16.5拦截器

您可以配置HandlerInterceptorsWebRequestInterceptors应用于所有传入的请求或限制在特定的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/

你可能感兴趣的文章
d3----line_color_gradient 学习记录
查看>>
矩阵运算 【微软面试100题 第四十五题】
查看>>
E: Sub-process /usr/bin/dpkg returned an error code (1)
查看>>
Openshift 部署第一个应用hello-openshift
查看>>
XML学习总结
查看>>
如何利用EnteLib Unity Interception Extension 和PIAB实现Transaction
查看>>
Django中ORM介绍和字段及其参数
查看>>
[汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
查看>>
【并查集合并注意!!!!】【最小生成树】
查看>>
【最大流】【HDU3572】Task Schedule
查看>>
iOS - Photo Album 图片/相册管理
查看>>
0723作业
查看>>
2016蓝桥杯 煤球数目 (代码)
查看>>
DOM&BOM
查看>>
a标签设置锚点定位div
查看>>
LightOJ 1079 Just another Robbery
查看>>
【NFS】nfs安装调优
查看>>
Linux 下子线程 exit code 在主线程中的使用
查看>>
类的实例化
查看>>
axios 获取不到数据错误
查看>>