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

Blade 未结 2 137
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> 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);	}

}


2条回答
  •  yyyyy
    yyyyy (楼主)
    2024-10-23 15:27

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

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

    11月中旬这样

提交回复