其实这部分配置就是从之前xml中提取出来,用注解的方式配置。
1、配置filter 方法一: 1)在application中添加注解@ServletComponentScan 2)写一个filter,用@WebFilter(urlPatterns = “/*”)注解标注
方法二: 1)写一个WebMvcConfig类继承WebMvcConfigurerAdapter 2)使用@EnableWebMvc,@Configuration注解 3)写一个filter的初始化方法,用@Bean注解 4)写一个FilterRegistrationBean的初始化方法,用@Bean注解,在初始化方法中配置之前的filter。 代码见后文。
2、配置拦截器 1)在之前的config类中,写一个拦截器初始化方法,用@Bean注解 2)重写addInterceptors方法, 在其中配置拦截路径以及不拦截 路径 代码见后文。
3、配置对象转换 见后文代码,配置了json格式转换为对象, 已经时间统一格式转换。
@EnableWebMvc @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter{ @Bean public HandlerInterceptorAdapter handlerInterceptorAdapter(){ return new HandlerInterceptorAdapter(); } @Bean public FilterRegistrationBean characterEncodingFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); //注入过滤器 registration.setFilter(characterEncodingFilter()); //拦截规则 registration.addUrlPatterns("/*"); //过滤器名称 registration.setName("CharacterEncodingFilter"); //过滤器顺序 registration.setOrder(1); return registration; } @Bean public CharacterEncodingFilter characterEncodingFilter(){ CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return characterEncodingFilter; } @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); List<MediaType> supportedMediaTypes = new ArrayList<>(); //支持的content-type supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); supportedMediaTypes.add(MediaType.TEXT_HTML); converter.setSupportedMediaTypes(supportedMediaTypes); converter.setObjectMapper(objectMapper()); return converter; } @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));//设置时区 objectMapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); //把空的数组转为null objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT,true); //特殊的对象属性转化或处理,自定义 //objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier()); return objectMapper; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(handlerInterceptorAdapter()).addPathPatterns("/**"); super.addInterceptors(registry); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(mappingJackson2HttpMessageConverter()); super.configureMessageConverters(converters); } }也可以在xml文件中配置,在application中使用注解@ImportResource(“classpath:beanRefContext.xml”),配置引入的xml文件。 在此xml文件中配置filter,interceptor,对象转换
这里额外记录一下对象转换的xml配置
<mvc:annotation-driven> <mvc:message-converters> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> <property name="objectMapper"> <bean class="org.codehaus.jackson.map.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>