springboot使用注解配置filter以及对象转换

其实这部分配置就是从之前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<>();
        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"));
        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>

猜你喜欢

转载自blog.csdn.net/zzp448561636/article/details/77745502
今日推荐