SpringBoot1 -- 配置Long转String的转换器

项目是前后端分离的,前段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。

猜你喜欢

转载自blog.csdn.net/qq_36781718/article/details/79980140