【发布时间】:2020-04-01 21:05:43
【问题描述】:
我编写了下面的程序来将Parameter 转换为JsonNode。当我设置3.9E38 时得到NumberFormatException。如何在 JsonNode 中设置BigDecimal?
public class JsonCheck {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper om = new ObjectMapper();
Parameter p = new Parameter();
p.setPrevValue(new BigDecimal("3.9E38"));
JsonNode node = om.convertValue(p,JsonNode.class);
System.out.println(node);
}
public static class DefaultValueSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(o.toPlainString());
}
}
public static class Parameter {
@JsonSerialize(using = DefaultValueSerializer.class)
private BigDecimal prevValue;
public void setPrevValue(BigDecimal prevValue) {
this.prevValue = prevValue;
}
public BigDecimal getPrevValue() {
return prevValue;
}
}
}
【问题讨论】:
-
@michalk,更新了代码示例。需要将数字转换为
non scientific格式。所以使用o.toPlainString() -
BigDecimal不需要自定义 Jackson 序列化程序。
标签: java json java-8 jackson jackson-databind