@JsonSerialize解决,Long类型的数据精度丢失的问题以及扩展功能

1,068 阅读1分钟

在开发页面的时候,遇到Long类型的数据,传送给前端遇到精度丢失的问题,

后端发的数据是这个:

在这里插入图片描述

前端接收到的数据:

Selig在这里插入图片描述

解决的途径有二种:

1 、在后端把Long类型的数据改成String类型(不推荐)
 2、springboot项目可以添加注解:@JsonSerialize(using= ToStringSerializer.class)
 

代码如下:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

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

注:这里jackson提供的提供的工具包

也可以扩展@JsonSerialize这个注解,进行其他操作

比如:

public class MyStatusSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String statusStr = "";
         switch (status) {
             case 0:
                 statusStr = "未使用";
                 break;
             case 1:
                 statusStr = "已使用";
                 break;
             case 2:
                 statusStr = "已过期";
                 break;
             case 3:
                 statusStr = "已销毁";
                 break;
             default:
                 statusStr = "未知状态";
         }
         jsonGenerator.writeString(statusStr);
     }
 }

在需要的地方添加注解

/**
 * 优惠卷状态
 */
@JsonSerialize(using = MyStatusSerializer.class)
private int status;

注:@JsonSerialize注解,该注解应用于数据转换,注解作用在该属性的getter()方法上