【发布时间】:2020-10-20 17:26:47
【问题描述】:
我有一个类,它有一个在构造函数中生成的UUID 属性,所以这意味着它是在每次创建新对象时生成的。
我正在使用 Jackson 将 json 字符串反序列化为带有 ObjectMapper 的对象。问题是当我反序列化时,它将json字符串反序列化为一个新对象,并调用该类的构造函数,从而生成一个新的UUID。所以基本上它需要一个已经有UUID的Json字符串,当它反序列化时它会改变它为一个新的。
任何想法如何使用 Jackson 解决这个问题?
【问题讨论】:
-
我很惊讶 UUID 没有被 JSON 中的 UUID 覆盖。 UUID 是最终的吗?
-
当我使用 Gson 时,我发现没有发生同样的问题,这就是为什么我相信 Jackson 也可以通过某种方式避免它。
-
@JoseMartinez 这不是最终的,我也很惊讶。
-
它被转换成这样的字符串 -> uuid = UUID.randomUUID().toString();
-
对不起,我无权分享代码。该bean只是具有问题中提到的构造函数的常规bean。不过,有一件事似乎很可疑。 UUID 属性的设置器检查属性是否为空,如果不为空则不设置它。这可能是问题吗?也许是因为这个 setter 而没有重写?
标签: java json constructor jackson deserialization