时区默认为伦敦时区,国区需要设置为东8区,为了避免每次都加注解。
1、在MvcConfigurer的extendMessageConverters方法里设置。(可能只对http发起的请求有效。)
相当于每次请求,临时配置。
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
MappingJackson2HttpMessageConverter json = (MappingJackson2HttpMessageConverter) converter;
ObjectMapper mapper = json.getObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 自定义日期格式化
mapper.setDateFormat(new DateFormatter());
// 设置为东八区的时区
mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
// 忽略null值
// mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
break;
}
}
converters.add(responseBodyConverter());
}
2、可以搞个@bean,返回ObjectMapper。比较推荐
@Configuration
public class JsonConfig {
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
// 实例化objectMapper
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 自定义日期格式化,它能支持更多日期格式
objectMapper.setDateFormat(new DateFormatter());
// 设置时区,也可以在spring配置文件配置
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
return objectMapper;
}
}
3、在spring配置文件里配置,配置项可能有限,没有2灵活。