Springboot中全局配置时间格式化不能正常使用问题
默认解决方案:
@Configuration
public class GlobalDateFormatConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = converter.getObjectMapper();
// 生成JSON时,将所有Long转换成String
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
// 时间格式化
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setDateFormat(new SimpleDateFormat(DateUtil.DATE_FORMAT_DEFAULT));
// 设置格式化内容
converter.setObjectMapper(objectMapper);
converters.add(0, converter);
}
}
这种方案大部分情况可以使用,但是我这边有个特殊情况。
管理系统的接口接受/返回参数是没有加密的,这种情况完全没问题;
但是手机端的接口接受/返回参数都是有加密的,像上面那样配置会导致手机端请求接口出现问题,通过如下方式配置即可:
@Configuration public class GlobalDateFormatConfig implements WebMvcConfigurer{ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.forEach(converter -> { if(converter instanceof MappingJackson2HttpMessageConverter){ ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter)converter).getObjectMapper(); // 生成JSON时,将所有Long转换成String SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(simpleModule); // 时间格式化 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.setDateFormat(new SimpleDateFormat(DateUtil.DATE_FORMAT_DEFAULT)); // 设置格式化内容 ((MappingJackson2HttpMessageConverter)converter).setObjectMapper(objectMapper); } }); } }
仅供自己学习,记录问题和参考,若有带来误解和不便请见谅,共勉!

浙公网安备 33010602011771号