java—有没有办法使用jackson将带有bigdecimal键的Map序列化为bigdecimal而不是字符串?

wi3ka0sx  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(257)

在尝试使用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]}]

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题