Spring4.x官方参考文档中文版——第21章 Web MVC框架(31)

21.16 Spring MVC的配置

        “21.2.1 在WebApplicationContext中的特殊bean类型” 和”21.2.2 DispatcherServlet的默认配置”这两个章节中,诠释了Spring MVC的特殊bean和被DispatcherServlet所使用的默认实现。在本章中,你会学到关于Spring MVC的额外两种配置方法。它们分别叫做MVC Java config和 MVC XML namespace。

        MVC Java config和MVC namespace提供了相似的默认配置方法,都是通过覆写DispatcherServlet的默认值来实现的。这样做的目的是,让大多数应用不得不有一致的配置,并且可从较高级别的架构来配置Spring MVC,这个架构可以作为简单易用的配置起始点,并且基本不需这些配置背后所需的知识。

        你可以根据自己的偏好,来选择MVC Java config或者MVC namespace。

不久后你可以见到,使用MVC Java config会更容易见识到配置背后的知识,并且具有更佳的细粒度,来直接配置创建好的Spring MVC的bean。现在,让我们从头开始吧。

 

21.16.1 启用MVC Java Config或MVC XML Namespace

        在需要启用MVC Java config时,在你的某个@Configuration类上写上@EnableWebMvc注解:

@Configuration
@EnableWebMvc
public class WebConfig {
 
}

        同样地,如果需要启用MVC XML Namespace时,在XML中的DispatcherServlet的context中使用mvc:annotation-driven元素(如果在context中没有定义DispatcherServlet,就在你的context根部使用此元素):

<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <mvc:annotation-driven/>
 
</beans>

        在上方的配置中,注册了一个RequestMappingHandlerMapping,一个RequestMappingHandlerAdapter,和一个ExceptionHandlerResolver,用来支持处理请求的那些带注解的controller,比如@RequestMapping,@ExceptionHandler等等。

        同时,以下行为也会启用:

  1. 除了用来进行数据绑定的JavaBeans PropertyEditors以外,会通过ConversionService实例来进行Spring 3 风格的类型转换。
  2. 为了支持使用@NumberFormat注解来格式化Number字段,会使用ConversionService
  3. 支持使用@DateTimeFormat注解来支持格式化Date,Calendar,Long和Joda Time字段。
  4. 如果在类路径中出现JSR-303 Provider,会支持使用@Valid来验证@Controller的输入。
  5. HttpMessageConverter,用来支持@RequestBody方法的参数,和从@RequestMapping或@ExceptionHandler方法的@ResponseBody返回的值。

以下是关于被mvc:annotaion-driven设置的HttpMessageConverters的完整清单:

        a.  ByteArrayHttpMessageConverter转换字节数组

        b.  StringHttpMessageConverter转换字符串

        c.  ResourceHttpMessageConverter和

             org.springframework.core.io.Resource之间的所有媒体类型互相转换

        d.  SourceHttpMessageConverter和javax.xml.transform.Source之间的互相转换

        e.  FormHttpMessageConverter和MultiValueMap<String,String>之间的表单数据互相转换

        f.  Jaxb2RootElementHttpMessageConverter和XML之间的Java对象转换——如果类路径下,JAXB2存在并且Jackson 2 XML extension不存在的情况下添加。

        g.  MappingJackson2HttpMessageConverter和JSON间的互相转换——在类路径下存在Jackson 2时添加。

        h.  MappingJackson2XmlHttpMessageConverter和XML间的转换——在类路径下存在Jackson 2 XMLextension时添加。

        i.  AtomFeedHttpMessageConverter转换Atom 订阅——如果类路径下存在Rome时添加。

        j.  RssChannelHttpMessageConverter转换RSS订阅——如果类路径下存在有Rome时添加。

 

        如需了解更多关于自定义默认转换器的信息,详见”21.16.12 消息转换器”这一章节。


提示:

    JacksonJSON 和XML转换器是利用ObjectMapper实例来创建的,这个实例又是通过Jackson2ObjectMapperBuilder来创建的,这样做是为了提供更好的默认配置。

    这个builder会自定义Jackson的以下默认属性:

  1. DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES会被停用
  2. MapperFeature.DEFAULT_VIEW_INCLUSION会被停用

同时,当某些众所周知的模组在类路径下被检测到时,会自动注册,包括:

  1. jackson-datatype-jdk7:支持Java 7的类型,比如Java.nio.file.Path
  2. jackson-datatype-joda:支持Joda-Time类型
  3. jackson-datatype-jsr310:支持Java 8的Date和Time API的类型
  4. jackson-datatype-jdk8:支持其他的Java 8 类型,比如Optional

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值