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;
}
省略其他配置...
}