SpringMVC的WebMvcConfigurerAdapter

来源:互联网 发布:windows libevent api 编辑:程序博客网 时间:2024/05/28 15:42

@EnableWebMvc

开启MVC配置,相当于

<?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>

Conversion and Formatting

配置convert和formatter的方法有两种,分别使用ConverterRegistry和FormatterRegistry
代码如下

使用注册工厂

package com.lf.web.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.core.convert.converter.Converter;import org.springframework.core.convert.converter.ConverterRegistry;import javax.annotation.PostConstruct;import java.util.Arrays;import java.util.List;/** * Created by LF on 2017/5/6. */@Configurationpublic class MyConverterRegistry {    @Autowired    private ConverterRegistry converterRegistry;    @PostConstruct    public void init() {        converterRegistry.addConverter(new StringToListConvert());    }    private static  class StringToListConvert implements Converter<String, List<String>> {        @Override        public List<String> convert(String source) {            if (source == null) {                return Arrays.asList();            } else {                String[] split = source.split(",");                return Arrays.asList(split);            }        }    }}

package com.lf.web.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.format.Formatter;import org.springframework.format.FormatterRegistry;import javax.annotation.PostConstruct;import java.text.ParseException;import java.util.List;import java.util.Locale;/** * Created by LF on 2017/5/6. */@Configurationpublic class MyFormatterRegistry {    @Autowired    private FormatterRegistry formatterRegistry;    @PostConstruct    public void init() {        formatterRegistry.addFormatter(new StringDateFormatter());    }    public static class StringDateFormatter implements Formatter<List> {        //解析接口,根据Locale信息解析字符串到T类型的对象;        @Override        public List parse(String text, Locale locale) throws ParseException {            return null;        }        //格式化显示接口,将T类型的对象根据Locale信息以某种格式进行打印显示(即返回字符串形式);        @Override        public String print(List object, Locale locale) {            return "我是格式化的日期";        }    }}

WebMvcConfigurerAdapter

package com.lf.web;import com.lf.web.convert.StringToListConvert;import com.lf.web.formatter.StringDateFormatter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;/** * Created by LF on 2017/5/4. */@Configuration@EnableWebMvc@ComponentScan//组件扫描public class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void addFormatters(FormatterRegistry registry) {        super.addFormatters(registry);        registry.addFormatter(new StringDateFormatter());        registry.addConverter(new StringToListConvert());    }    }

使用xml配置

<?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 conversion-service="conversionService"/>    <bean id="conversionService"            class="org.springframework.format.support.FormattingConversionServiceFactoryBean">        <property name="converters">            <set>                <bean class="com.lf.web.convert.StringToListConvert"/>            </set>        </property>        <property name="formatters">            <set>                <bean class="com.lf.web.formatter.StringDateFormatter"/>            </set>        </property>        <property name="formatterRegistrars">            <set>                <bean class="com.lf.web.formatter.StringDateFormatter"/>            </set>        </property>    </bean></beans>

Interceptors

拦截器的实现

package com.lf.web;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Created by LF on 2017/5/7. */public class MyHandlerInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        System.out.println("===========HandlerInterceptor1 preHandle");        return super.preHandle(request, response, handler);    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {        super.postHandle(request, response, handler, modelAndView);        System.out.println("===========HandlerInterceptor1 postHandle");    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        super.afterCompletion(request, response, handler, ex);        System.out.println("===========HandlerInterceptor1 afterCompletion");    }}

xml配置

<bean id="handlerInterceptor1"   class="com.lf.web.MyHandlerInterceptor"/>  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">      <property name="interceptors">          <list>             <ref bean="handlerInterceptor1"/>            <ref bean="handlerInterceptor2"/>          </list>      </property>  </bean> <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>

使用Java配置

package com.lf.web;import com.lf.web.convert.StringToListConvert;import com.lf.web.formatter.StringDateFormatter;import com.lf.web.interceptor.MyHandlerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.*;import org.springframework.web.servlet.view.InternalResourceViewResolver;/** * Created by LF on 2017/5/4. */@Configuration@EnableWebMvc@ComponentScan//组件扫描public class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        super.addInterceptors(registry);        registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/").excludePathPatterns("/admin");    }    }

configureContentNegotiation

ContentNegotiatingViewResolver是 ViewResolver 使用所请求的媒体类型的一个实现(基于文件类型扩展,输出格式URL参数指定类型或接受报头)来选择一个合适的视图一个请求。ContentNegotiatingViewResolver本身并不解决视图,只不表示为其他的 ViewResolver,您可以配置来处理特定的视图(XML,JSON,PDF,XLS,HTML,..)。

@Configuration@EnableWebMvc@ComponentScan//组件扫描public class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {        configurer.mediaType("json", MediaType.APPLICATION_JSON);    }    }
<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>

View

@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void addViewControllers(ViewControllerRegistry registry) {        registry.addViewController("/").setViewName("home");    }}
<mvc:view-controller path="/" view-name="home"/>

View Resolvers

@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void configureViewResolvers(ViewResolverRegistry registry) {        registry.enableContentNegotiation(new MappingJackson2JsonView());        registry.jsp();    }}
<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:jsp/></mvc:view-resolvers>

Resources

@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/resources/**").addResourceLocations("/public-resources/");    }}
<mvc:resources mapping="/resources/**" location="/public-resources/"/>
@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable();    }}
<mvc:default-servlet-handler/>
@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable("myCustomDefaultServlet");    }}

Path Matching

@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void configurePathMatch(PathMatchConfigurer configurer) {        configurer            .setUseSuffixPatternMatch(true)            .setUseTrailingSlashMatch(false)            .setUseRegisteredSuffixPatternMatch(true)            .setPathMatcher(antPathMatcher())            .setUrlPathHelper(urlPathHelper());    }    @Bean    public UrlPathHelper urlPathHelper() {        //...    }    @Bean    public PathMatcher antPathMatcher() {        //...    }}

Message Converters

@Configuration@EnableWebMvcpublic class WebConfiguration extends WebMvcConfigurerAdapter {    @Override    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()                .indentOutput(true)                .dateFormat(new SimpleDateFormat("yyyy-MM-dd"))                .modulesToInstall(new ParameterNamesModule());        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.xml().build()));    }}

示例代码

http://git.oschina.net/null_064_8008/SpringLearning/tree/master/MyWebMvcConfigurerAdapter?dir=1&filepath=MyWebMvcConfigurerAdapter&oid=9ecf2ab051dbb20d5c96eab64febf5bf878f3369&sha=d11b80c3deb543bc418274e53e4a792d4a42dfca

0 0
原创粉丝点击