spring mvc配置
2019-07-12 本文已影响0人
xzz4632
1. 启用mvc配置
-
Java:
在配置类上使用@EnableWebMvc
注解. -
Xml:
<mvc:annotation-driven/>
2. 使用mvc配置API
- Java:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// 实现各种方法
}
- Xml:
以mvc
开头的各种配置元素及其子元素
3. 添加类型转换
默认情况下,会安装Number
和Date
类型的格式化程序,包括对@NumberFormat
和@DateTimeFormat
注释的支持。如果类路径上存在Joda-Time
,则还安装了对Joda-Time
格式化库的完全支持。
- Java:
@Override
public void addFormatters(FormatterRegistry registry) {
// FormatterRegistry 对象提供了一系列的addxxx方法, 添加各种转换器
}
- Xml:
<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="org.example.MyAnnotationFormatterFactory"/>
</set>
</property>
<property name="formatterRegistrars">
<set>
<bean class="org.example.MyFormatterRegistrar"/>
</set>
</property>
</bean>
4. 添加验证器
默认情况下,如果类路径上存在Bean验证器(例如Hibernate Validator
),LocalValidatorFactory
Bean将注册为全局验证器,可以使用@Valid
和@Validated
注解验证控制器方法参数。
@Override
public Validator getValidator() {
// 返回一个实现了Validator接口的验证器
}
- Xml:
<mvc:annotation-driven validator="globalValidator"/>
注:还可以在controller
类中通过@InitBinder
方法注册本地验证器.
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new FooValidator());
}
5. 配置拦截器
- Java:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor());
registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
}
- Xml:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
6. 配置Content Type
spring如何根据accept
请求头或路径的扩展名或某个参数来确定请求的content-type. 默认先检查路径的扩展名, 再检查accept
请求头.
- Java:
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.mediaType("json", MediaType.APPLICATION_JSON);
configurer.mediaType("xml", MediaType.APPLICATION_XML);
}
- Xml:
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
7. 配置Message转换器
您可以通过覆盖configureMessageConverters()
(替换Spring MVC创建的默认转换器)或覆盖extendMessageConverters()
(定制默认转换器或向默认转换器添加额外的转换器)来定制HttpMessageConverter。
- Java:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//
}
- Xml:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
8. 配置视图控制器
例如: 定义ParameterizableViewController
的快捷方式,它在调用时立即转发到视图。当视图生成响应之前没有Java控制器逻辑可执行时,可以在静态情况下使用它。例如: 将一个请求转发给一个名为home的视图:
- Java:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
- Xml:
<mvc:view-controller path="/" view-name="home"/>
9. 配置视图解析器
- Java:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.enableContentNegotiation(new MappingJackson2JsonView());
registry.freeMarker().cache(false);
}
- xml:
<mvc:view-resolvers>
<mvc:content-negotiation>
<mvc:default-views>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</mvc:default-views>
</mvc:content-negotiation>
<mvc:freemarker cache="false"/>
</mvc:view-resolvers>
10. 静态资源配置
给定一个以/resources开头的请求,相对路径用于查找web应用程序根目录下的/public或类路径下的/static的静态资源。这些资源将在未来一年到期,以确保最大限度地使用浏览器缓存:
- Java:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/public", "classpath:/static/")
.setCachePeriod(31556926);
}
- Xml:
<mvc:resources mapping="/resources/**" location="/public, classpath:/static/"
cache-period="31556926" />