2017-09-19 32 views
0

使用杰克逊版本2.7.3序列化BigDecimal对象映射时遇到问题(我无法在我的项目中更改此版本)。它总是被序列化为Double。 代码我使用的序列化:如何序列化BigDecimal与杰克逊映射值?

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

尝试添加:

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

和使用串行:

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

是否有可能要序列化它作为BigDecimal的?

+0

当你说你想要一个地图,你说你想从内部BigDecimal的所有内部成员变量和它们的值,而不是十进制值本身?如果没有,您对JSON的期望是什么?请举一个例子。 –

+0

我希望BigDecimal字段在Map中是BigDecimal字段(作为值),其他(如String,Integer)应该保持自己。例如BigDecimal值Entry ,String value Entry MolecularMan

回答

0

我用替换序列化解决了这个:

return new ObjectMapper().enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS).convertValue(pojo, new HashMap<String, Object>() {}.getClass()); 
+0

如果您的问题通过此答案回答,请将其标记为接受的答案。即使你问过问题。因此,它将移动到回答问题scetion – VedX

+0

我必须等待1天才能接受我自己的答案 – MolecularMan