关于JsonFormat失效原因,Long 类型进度丢失问题

Long类型在java种最大长度是19位,前端获取到该数据时,最大支持的进度不到19位,剩余位数由0补充,然后前端把数据传送给后台时,与真实数据出现差别。此时就需要把Long类型转换成String类型,防止数据进度丢失,转换方式以下几种:

1、给实体对象的Long类型的属性加注解@JsonFormat(shape = JsonFormat.Shape.STRING)

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

@Data
public class TestDemo {

    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;

    private String name;
}

 2、返回类型在实体对象种转换成String

import lombok.Data;

@Data
public class TestDemo {

    private String id;

    private String name;
}

3、springboot 添加配置信息

@Configuration
public class LongToStringJsonConfig extends WebMvcConfigurationSupport {
   
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(jackson2HttpMessageConverter);
    }
}

以上是Long转换成String的几种方法,不过还有其他的方式,就不介绍了。

关于JsonFormat注解会在几种情况下失效:

1、用gson包种JsonObject 对象,添加实体类,然后返回给前端时失效,返回的还是Long类型,

 TestDemo testDemo = new TestDemo();
 testDemo.setId(1234567890123456789l);
 testDemo.setName("ceshi");
 jsonObject.addProperty("json",newGsonBuilder().serializeNulls().create().toJson(testDemo));

接口调用时候返回的json数据为:{"json":"{\"id\":1234567890123456789,\"name\":\"ceshi\"}"}

解决方案:添加代码:.setLongSerializationPolicy(LongSerializationPolicy.STRING)

 TestDemo testDemo = new TestDemo();
 testDemo.setId(1234567890123456789l);
 testDemo.setName("ceshi");
 jsonObject.addProperty("json",new GsonBuilder().serializeNulls().setLongSerializationPolicy(LongSerializationPolicy.STRING).create().toJson(testDemo));

2、用net.sf.json-lib下的JsonObject的时候,也会导致注解JsonFormat失效,此时把JsonObject 换成Map此时JsonFormat注解又可以生效了

其他情况后续再整理!!!!!

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值