项目是前后端分离的,前段js获取到long类型的id,会出现数值不对的情况,因此传到前端数据的id都需要转为String。
除了手动转之外,可以统一配置,这样对外使用ResponseBody注解就会使用转换器自动转换。
在WebAppConfigurer(自定义的类,继承了WebMvcConfigurerAdapter)中实现extendMessageConverters方法
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { /** * 排除掉原来的MappingJackson2HttpMessageConverter */ List<MappingJackson2HttpMessageConverter> originalConverters = new ArrayList<>(); for (HttpMessageConverter<?> converter : converters) { if (converter instanceof MappingJackson2HttpMessageConverter) { originalConverters.add((MappingJackson2HttpMessageConverter) converter); } } if (CollectionUtils.isNotEmpty(originalConverters)) { converters.removeAll(originalConverters); } MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); /** * 将long类型的数据转为String类型 */ SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); simpleModule.addSerializer(long.class, ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); }做个笔记,以免以后遇到相似的问题,能尽快解决掉。
******************************************************************************************************************
另一种思路:
自定义序列化器和反序列化器,在需要转换的地方通过@JsonSerialize和@JsonDeserialize中的参数using设置使用哪一个序列化器和反序列化器。
示例文章链接Long类型转json时前端js丢失精度解决方案
这种思路更灵活,只需要在某个需要转换的字段上加上注解即可,而全局的配置会把所有的都转换了,最好不要使用我最开始的那种配置,除非全局都需要将Long转为String。