spring|WebMvcConfigurerAdapter 详解

【spring|WebMvcConfigurerAdapter 详解】一、WebMvcConfigurerAdapter是什么
Spring内部的一种配置方式
采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制
二、WebMvcConfigurerAdapter常用的方法
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

/** 添加拦截器 **/ void addInterceptors(InterceptorRegistry registry); /** 这里配置视图解析器 **/ void configureViewResolvers(ViewResolverRegistry registry); /** 配置内容裁决的一些选项 **/ void configureContentNegotiation(ContentNegotiationConfigurer configurer); /** 视图跳转控制器 **/ void addViewControllers(ViewControllerRegistry registry); /** 静态资源处理 **/ void addResourceHandlers(ResourceHandlerRegistry registry); /** 默认静态资源处理器 **/ void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

使用HttpMessageConverter进行http序列化和反序列化
// 添加converter的第一种方式,代码很简单,也是推荐的方式 // 这样做springboot会把我们自定义的converter放在顺序上的最高优先级(List的头部) // 即有多个converter都满足Accpet/ContentType/MediaType的规则时,优先使用我们这个 @Bean public JavaSerializationConverter javaSerializationConverter() { return new JavaSerializationConverter(); } // 添加converter的第二种方式 // 通常在只有一个自定义WebMvcConfigurerAdapter时,会把这个方法里面添加的converter(s)依次放在最高优先级(List的头部) // 虽然第一种方式的代码先执行,但是bean的添加比这种方式晚,所以方式二的优先级 大于 方式一 @Override public void configureMessageConverters(List> converters) { // add方法可以指定顺序,有多个自定义的WebMvcConfigurerAdapter时,可以改变相互之间的顺序 // 但是都在springmvc内置的converter前面 converters.add(new JavaSerializationConverter()); }// 添加converter的第三种方式 // 同一个WebMvcConfigurerAdapter中的configureMessageConverters方法先于extendMessageConverters方法执行 // 可以理解为是三种方式中最后执行的一种,不过这里可以通过add指定顺序来调整优先级,也可以使用remove/clear来删除converter,功能强大 // 使用converters.add(xxx)会放在最低优先级(List的尾部) // 使用converters.add(0,xxx)会放在最高优先级(List的头部) @Override public void extendMessageConverters(List> converters) { converters.add(new JavaSerializationConverter()); }

使用HttpMessageConverter进行http序列化和反序列化例子:
@Override public void configureMessageConverters(List>converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); simpleModule.addSerializer(BigDecimal.class,ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); }

    推荐阅读