如何使用 Jackson 序列化 BigDecimal 以映射值?

Mol*_*Man 4 java serialization jackson

使用 Jackson 版本 2.7.3 将 BigDecimal 对象序列化为 Map 时遇到问题(我无法在项目中更改此版本)。它始终序列化为 Double。我用于序列化的代码:

public static Map<String, Object> serializeToMap(Object pojo) {
    return new ObjectMapper().convertValue(pojo, new HashMap<String, Object>() {}.getClass());
}
Run Code Online (Sandbox Code Playgroud)

尝试添加:

@JsonSerialize(typing = JsonSerialize.Typing.STATIC, as = BigDecimal.class)

并使用序列化器:

public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
    jgen.writeObject(value.toString());
}
Run Code Online (Sandbox Code Playgroud)

是否可以将其序列化为 BigDecimal?

Mol*_*Man 5

我通过将序列化替换为以下内容解决了这个问题:

return new ObjectMapper()
    .enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS)
    .convertValue(pojo, new HashMap<String, Object>() {}.getClass());
Run Code Online (Sandbox Code Playgroud)