一、该问题的重现步骤是什么?
1. 对象为Long类型,返回前端的时候,前端精度丢失,需要手动加注解转成字符串类型。
二、你期待的结果是什么?实际看到的又是什么?
能够全局统一自动将Long类型转成字符串
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
4.2.0 开源版 Ubuntu
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
在以前的老版本,加一个这个WebMvcConfig可以统一将返回前端的对象里的Long转成字符串,避免精度丢失。但是4.2.0版本,加了这个之后,会导致Knife4j文档无法打开。如果将converters.add(0, jackson2HttpMessageConverter);中的0改大,加的这个WebMvcConfig 又无法生效
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(smt);
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
List<MediaType> list = Lists.newArrayList();
list.add(MediaType.APPLICATION_JSON_UTF8); jackson2HttpMessageConverter.setSupportedMediaTypes(list); SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); simpleModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
simpleModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(0, jackson2HttpMessageConverter); }
}
扫一扫访问 Blade技术社区 移动端