后端把Long類型的數據傳給前端,前端可能會出現精度丟失的情況。例如:201511200001725439這樣一個Long類型的整數,傳給前端后會變成201511200001725440。
解決方法:
方法一:在后臺將這個Long類型的字段轉換成String類型的,風險比較大。
方法二:使用fastjson的提供的注解,@JSONField(serializeUsing= ToStringSerializer.class)。
spirngboot 的解決方案:注意是加在要處理的字段上
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;@JsonSerialize(using = ToStringSerializer.class)
備注:
fastjson在com.alibaba.fastjson.serializer包下面提供了多種數據類型轉換的注解。
自己也可以拓展這些注解,通過實現ObjectSerializer接口來完成。
json轉換需要使用fastjson轉換
ToStringSerializer的代碼:
public class ToStringSerializer implements ObjectSerializer {public static final ToStringSerializer instance = new ToStringSerializer();@Overridepublic void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,int features) throws IOException {SerializeWriter out = serializer.out;if (object == null) {out.writeNull();return;}String strVal = object.toString();out.writeString(strVal);}}
?