关于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> 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注解又可以生效了

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

 

 

 

你可能感兴趣的:(java,后端)