这一篇文章对应于Spring参考文档 Configuring Spring MVC,讲的是Spring Web MVC各部分的配置方法,包括Java代码配置和XML文件配置以及MVC命名空间的使用方法。
启用MVC Java配置和XML命名空间
默认配置
要启用MVC Java配置(@Controller等各种注解)和XML命名空间,如果使用的是Java配置,在配置类上再添加@EnableWebMvc
注解即可。
@Configuration
@EnableWebMvc
public class WebAppConfig {
}
如果使用XML配置文件的话,添加下面一行即可。
<mvc:annotation-driven/>
不论使用哪种方式,都会在Spring中注册一些组件来提供最基本的MVC功能。这些功能在文档中说的很清楚。我简单翻译了一下:
上面的配置会注册一个
RequestMappingHandlerMapping
,一个RequestMappingHandlerAdapter
和一个ExceptionHandlerExceptionResolver
来提供注解控制器和注解方法(比如@RequestMapping和@ExceptionHandler等)处理请求的功能。还会启用以下功能:
- 通过一个
ConversionService
实例,来进行Spring 3 方式的类型转换及数据绑定支持。- @NumberFormat格式化数字字段的支持
- @DateTimeFormat格式化
Date
、Calendar
、Long
、JodaTime类型字段的支持。- 在控制器方法上使用
@Valid
验证Bean的支持,如果检测到JSR-303 Bean验证的实现。- 一组
HttpMessageConverter
,用于在字符串和所需Java类型之间进行类型转换,具体的列表参见Spring文档 22.16.1. Enabling the MVC Java Config or the MVC XML Namespace。
通过这些默认配置,我们即可开始最基本的Spring MVC使用。
自定义配置
上面提供了最基本的配置。如果需要自定义某些配置也可以。如果使用Java配置的话,让配置类实现WebMvcConfigurer
接口,更常用的办法是继承WebMvcConfigurerAdapter
基类,通过重写基类中的方法即可配置相关功能。
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
//有很多个方法可以重写,来提供自定义功能
}
如果使用XML配置文件,通过IDE的自动补全功能查看一下<mvc:annotation-driven/>
有哪些子属性和子元素。
类型转换和格式化
默认情况下Spring注册了Number
(包括所有基本数字类型)和java.util.Date
的类型转换和格式化功能。要提供类型的转换和格式化功能,就需要自己注册相应的类型转换器和格式化器。
如果使用Java配置的话,重写addFormatters(FormatterRegistry registry)方法并添加相应功能即可。
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
// Add formatters and/or converters
}
}
如果使用XML配置的话,需要注册一个ConversionService
,然后添加到<mvc:annotation-driven>
节点中。
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="org.example.MyConverter"/>
</set>
</property>
<property name="formatters">
<set>
<bean class="org.example.MyFormatter"/>
<bean class=