gpt4 book ai didi

java - 用于原始类型的 Jackson 序列化器

转载 作者:行者123 更新时间:2023-12-02 21:01:14 28 4
gpt4 key购买 nike

我正在编写一个自定义序列化程序,将 double 值转换为 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}

有没有办法让它在两种情况下遵循相同的行为?

最佳答案

您可以为原始类型 double 注册 JsonSerializer

module.addSerializer(double.class, new DoubleSerializer());

关于java - 用于原始类型的 Jackson 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945044/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com