我正在编写一个自定义序列化程序,以将双精度值转换为JSON对象中的字符串。到目前为止,我的代码:
public String toJson(Object obj) throws IOException { ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule("DoubleSerializer", new Version(1, 0, 0, "")); module.addSerializer(Double.class, new DoubleSerializer()); mapper.registerModule(module); return mapper.writeValueAsString(obj); } public class DoubleSerializer extends JsonSerializer<Double> { @Override public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { String realString = new BigDecimal(value).toPlainString(); jgen.writeString(realString); } }
这对于Double(类成员)非常有效,但不适用于double(原始类型)成员。例如,
public void test() throws IOException { JsonMaker pr = new JsonMaker(); TestClass cl = new TestClass(); System.out.println(pr.toJson(cl)); } class TestClass { public Double x; public double y; public TestClass() { x = y = 1111142143543543534645145325d; } }
返回:{“ x”:“ 1111142143543543565865975808”,“ y”:1.1111421435435436E27}
有没有办法让这两种情况都遵循相同的行为?
您可以JsonSerializer为原始类型注册double。
JsonSerializer
double
module.addSerializer(double.class, new DoubleSerializer());