解决@JsonSerialize注解失效的问题

导读:本篇文章讲解 解决@JsonSerialize注解失效的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题来源

在项目中,当实体类的字段为Long类型时 如果Long值超过前端能处理显示的长度范围时,会导致前端处理数值的精度丢失。

所以我们需要将Long值返回给前端时转为String,另外又不想变更字段的类型,或者添加新的字段的话。这个时候我们可以用注解@JsonSerialize,将注解标注在对应字段上,在Json序列化的时候把Long自动转为String。注解的定义如下:

package com.fasterxml.jackson.databind.annotation;


@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonSerialize {
...
}

@JsonSerialize是Spring Boot默认提供的解析Json的Jackson工具包下的注解。在使用时将该注解定义在字段上即可。Jackson提供了许多Json序列化器。另外我们也可以自定义序列化器。
在这里插入图片描述
我在项目中都是将注解标注在对应字段上,在Json序列化的时候把Long自动转为String。

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

问题分析

在网上找到的解决方案大多说的是:被转换的字段必须是包装类类型,否则会转换失败。

@JsonSerialize(using = ToStringSerializer.class)
private Long parentId;    //转化成功
@JsonSerialize(using = ToStringSerializer.class)
private long parentId;    //转化失败

但我这次遇到的不是这个错误,我是在开发过程中突然发现后台传到前端的Long类型数据,前端收到的是整数型的精度丢失的数据。

原因

@JsonSerialize注解是在SpringBoot默认提供的JSON解析包Jackson中的。但是因为我新引入的oss包中包含了谷歌提供的解析JSON数据的GSON工具包,造成了注解@JsonSerialize失效。

解决

在pom.xml中指定排除oss包中的GSON包即可。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/44293.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!