配置MappingJackson2HttpMessageConverter不生效

Spring MVC 返回json数据,默认情况下日期是一长串数字,需要配置MappingJackson2HttpMessageConverter,使日期数据格式化
在这里插入图片描述

@Configuration
@EnableWebMvc
@ComponentScan({"com.sky.springmvctest"})
// WebMvcConfigurationSupport WebMvcConfigurer
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
	@Bean
	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
		MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
		// 设置日期格式
		ObjectMapper objectMapper = new ObjectMapper();
		mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
		objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
		// 设置中文编码格式
		List<MediaType> list = new ArrayList<MediaType>();
		list.add(MediaType.APPLICATION_JSON_UTF8);
		mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
		return mappingJackson2HttpMessageConverter;
	}
	省略其他配置...
}

配置后日期依然没有格式化,查找源码发现:
WebMvcConfigurationSupport
protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters)

		if (jackson2Present) {
			messageConverters.add(new MappingJackson2HttpMessageConverter(
					Jackson2ObjectMapperBuilder.json().applicationContext(this.applicationContext).build()));
		}
		else if (gsonPresent) {
			messageConverters.add(new GsonHttpMessageConverter());
		}

SpringMvcConfig 配置的bean没有替换messageConverters中的MappingJackson2HttpMessageConverter
重写extendMessageConverters方法,如果存在MappingJackson2HttpMessageConverter则删掉,加入新的

@Configuration
@EnableWebMvc
@ComponentScan({"com.sky.springmvctest"})
// WebMvcConfigurationSupport WebMvcConfigurer
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
	@Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		for (int i = 0; i < converters.size(); i++) {
			HttpMessageConverter<?> messageConverter = converters.get(i);
			if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
				converters.remove(i);
			}
		}
		converters.add(mappingJackson2HttpMessageConverter());
	}
	
	@Bean
	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
		MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
		// 设置日期格式
		ObjectMapper objectMapper = new ObjectMapper();
		mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
		objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
		// 设置中文编码格式
		List<MediaType> list = new ArrayList<MediaType>();
		list.add(MediaType.APPLICATION_JSON_UTF8);
		mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
		return mappingJackson2HttpMessageConverter;
	}
	省略其他配置...
}

在这里插入图片描述

发布了95 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_26264237/article/details/98884649