Jersey / MOXy任意JSON属性

时间:2015-11-03 07:17:53

标签: java json jersey moxy

我有一个具有任意JsonValue属性的bean,我需要从JSON编组/解组。

public class MyBean {
    public String name;
    public JsonValue data;
}

由于JsonValue是标准的javax.json.JsonValue,我期待MOXy能够将其开箱即用/解组,而是我得到了一个简单的字符串:

{
  "name": "foo",
  "data": "{\"some\":\"json\"}"
}

我期待的是:

{
  "name": "foo",
  "data": {
    "some": "json"
  }
}

解组时,data变为null。我如何使用JsonValue并让MOXy按预期管理它们?

(我需要坚持使用默认的Jersey / MOXy,所以不要使用其他库。)

1 个答案:

答案 0 :(得分:0)

注意:这不是答案(OP的解决方案)。我在阅读&#34之前输入了它;我需要坚持使用默认的Jersey / MOXy" 。会改变评论,但有太多的东西。我将把它留给未来的读者。

javax.json类有一个different provider。 MOXy并不知道如何以您期望的方式处理它们。在没有查看任何源代码的情况下,我猜你所看到的是来自toString()实例的JsonValue的值。如果无法处理类型,将会发生这种情况。您只需拨打toString()电话。

即使您添加了我链接的依赖项,您仍然会遇到不同提供商之间互不干扰的问题。需要做的是,在MOXy序列化MyBean实例的过程中,如果它看到javax.json对象,它会尝试寻找不同的提供程序来处理它。它只是没有这样的工作。只使用一个提供商。

我能想到的唯一解决方案是使用Jackson,而不是使用MOXy,它有一个支持javax.json的模块。如果您向杰克逊注册该模块,它将知道如何处理javax.json类型,"中序列化"。您可以查看this answer,其中介绍了使其与杰克逊合作的步骤。