一、该问题的重现步骤是什么?
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> 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 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技术社区 移动端