18.16.1启用MVC Java Config或MVC XML命名空间
要启用MVC Java配置,请将注解@EnableWebMvc添加到其中一个@Configuration类中:
@Configuration
@EnableWebMvc
public class WebConfig {
}
要在XML中实现相同的效果,请在DispatcherServlet上下文中使用mvc:annotation-driven元素(如果没有定义DispatcherServlet上下文,则在根上下文中):
<?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和一个ExceptionHandlerExceptionResolver(以及其他),以支持使用注解的控制器方法(如@RequestMapping,@ExceptionHandler等)处理请求。
它还支持以下功能:
除了用于数据绑定的JavaBean PropertyEditor之外,还通过ConversionService实例进行Spring 3样式类型转换。
支持通过
ConversionService使用@NumberFormat注解格式数字字段。支持使用
@DateTimeFormat注解格式化Date,Calendar,Long和Joda时间字段。如果JSR-303提供程序存在于类路径中,则支持validating使用
@Valid验证@Controller输入。HttpMessageConverter支持@RequestBody方法参数和@ResponseBody方法从@RequestMapping或@ExceptionHandler方法返回值。这是由mvc设置的HttpMessageConverters的完整列表:annotation-driven:
ByteArrayHttpMessageConverter转换字节数组。StringHttpMessageConverter转换字符串。ResourceHttpMessageConverter为所有媒体类型转换为org.springframework.core.io.Resource。SourceHttpMessageConverter转换为/从一个javax.xml.transform.Source。FormHttpMessageConverter将表单数据转换为MultiValueMap或从MultiValueMap转换而来。Jaxb2RootElementHttpMessageConverter将Java对象转换为/从XML转换 - 如果存在JAXB2并且类路径中不存在Jackson 2 XML扩展,则添加它。MappingJackson2HttpMessageConverter转换为/从JSON - 如果Jackson 2存在于类路径中,则添加。MappingJackson2XmlHttpMessageConverter转换为/从XML - 如果Jackson 2 XML扩展存在于类路径中,则添加。MappingJackson2SmileHttpMessageConverterconverts to/from Smile (binary JSON) — added ifJackson 2 Smile extensionis present on the classpath.MappingJackson2SmileHttpMessageConverter转换为/从Smile(二进制JSON) - 添加如果Jackson 2 CBOR extension存在于类路径。AtomFeedHttpMessageConverter转换Atom提要 - 如果Rome出现在类路径中,则添加Atom提要。RssChannelHttpMessageConverter转换RSS源 - 如果Rome出现在类路径中,则添加。
有关如何定制这些默认转换器的更多信息,请参见第18.16.12节“消息转换器”。
![]() |
|---|
Jackson JSON和XML转换器是使用Jackson2ObjectMapperBuilder创建的ObjectMapper实例创建的,以便提供更好的默认配置。此构建器使用以下几种方法自定义Jackson的默认属性:DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES被禁用。 MapperFeature.DEFAULT_VIEW_INCLUSION被禁用。如果在类路径中检测到以下模块,它将自动注册下列已知模块:jackson-datatype-jdk7:支持java.nio.file.Path等Java 7类型。jackson-datatype-joda:支持Joda-Time类型。jackson-datatype-jsr310:支持Java 8 Date&Time API类型。jackson-datatype-jdk8:支持其他Java 8类型,如Optional。 |
