4.2.0版本有办法统一将Long类型转成String类型返给前端吗?

Blade 未结 2 487
Geekerstar
Geekerstar 剑童 2024-10-12 15:30

一、该问题的重现步骤是什么?

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); }
}


2条回答
  • 2024-10-12 15:58

    开源版目前还不支持,等我们下个版本吧,下个版本把这个功能加上

    0 讨论(0)
  • 2024-10-23 15:27

    新版啥时候发呀,需要统一处理精度问题,boot版本

    作者追问:2024-10-23 15:47

    11月中旬这样

    0 讨论(1)
代码语言
提交回复