在尝试使用jackson和属性objectmapper.defaulttyping.non_final序列化Map<bigdecimal,bigdecimal>时,键被序列化为字符串,而值被正确序列化为bigdecimal。这在我反序列化它时会引起问题,因为它被反序列化为map<string,bigdecimal>。
我需要将键序列化为bigdecimal而不是字符串,有什么方法可以这样做吗?我使用的是jackson-all-1.9.11.jar,但我也尝试过使用jackson-2.12.4 jar,但结果是一样的。
有什么解决办法吗?或者,我是否可以创建一个自定义序列化程序,该序列化程序仅覆盖objectmapper在使用bigdecimal键时自动使用的Map序列化程序?如果是,如何做到这一点?
下面是一个代码示例,以及返回的结果。
public static void main(String[] args)
{
try
{
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
Map<BigDecimal, BigDecimal> map = new HashMap<>();
map.put(BigDecimal.ONE, BigDecimal.ONE);
map.put(BigDecimal.TEN, BigDecimal.TEN);
String str = mapper.writeValueAsString(map);
System.out.println(str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
结果如下:
["java.util.HashMap",{"10":["java.math.BigDecimal",10],"1":["java.math.BigDecimal",1]}]
暂无答案!
目前还没有任何答案,快来回答吧!