Long类型转换精度丢失问题解决

在后台返回给前端的时候 默认的情况下是由JACKSON进行转换成JSON的,但是数据还是Long类型所以给前端变成了丢失精度。只要在后台返回给前端的时候数据为字符串就可以解决这个问题了。

由此我们可以采用的方式有两种:

1. 全局设置 全局设置 之后 所有的返回给前端都是返回了字符串 2. 局部设置一个序列化器 在哪里使用哪里添加即可

第一种:

package com.it.common.jackson;

import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Configuration
public class JacksonConfig {
	/**
	 * Jackson全局转化long类型为String,解决jackson序列化时传入前端Long类型缺失精度问题
	 */
	@Bean
	public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
		Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {
			@Override
			public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
				//变成字符串
				jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
			}
		};
		return cunstomizer;
	}
}

第二种(定义序列化器):

package com.it.common.util;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 自定义序列化器 将Long类型数据转成String
 */
public class Long2StringSerializer extends JsonSerializer<Long> {
    @Override
    public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if(value!=null){
            gen.writeString(value.toString());
        }

    }
}

在字段中使用只需要加入注解:

@JsonSerialize(using = Long2StringSerializer.class)
经验分享 程序员 微信小程序 职场和发展