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扩展存在于类路径中,则添加。MappingJackson2SmileHttpMessageConverter
converts 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 。 |