【问题标题】:Jersey/MOXy arbitrary JSON propertyJersey/MOXy 任意 JSON 属性
【发布时间】:2015-11-03 07:17:52
【问题描述】:

我有一个带有任意 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。如何使用JsonValues 并让 MOXy 像预期的那样管理它们?

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

【问题讨论】:

    标签: java json jersey moxy


    【解决方案1】:

    注意:这不是答案(OP 的解决方案)。我在阅读 “我需要坚持使用默认 Jersey/MOXy” 之前将其输入。本来想换个评论的,但是内容太多了。我会把它留给未来的读者。

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

    即使你添加了我链接到的依赖项,你仍然会遇到不同提供者不相互交互的问题。需要发生的是,在 MOXy 序列化 MyBean 实例的过程中,如果它看到 javax.json 对象,它会尝试寻找不同的提供者来处理它。它只是不能那样工作。将只使用一个提供程序。

    我能想到的唯一解决方案是不使用 MOXy,而是使用 Jackson,它有一个支持 javax.json 的模块。如果您向 Jackson 注册该模块,它将知道如何处理 javax.json 类型,“中间序列化”。你可以看看this answer,它描述了你应该采取的步骤来使它与杰克逊一起工作。

    【讨论】:

    • 我也换成了杰克逊。在尝试坚持使用 MOxy 后,因为它是 Jersey 的新默认 JSON 提供程序,我遇到了麻烦,所以在我切换之前遇到了更多麻烦,再也没有遇到任何问题。
    猜你喜欢
    • 2018-12-23
    • 2016-03-30
    • 2016-04-28
    • 1970-01-01
    • 2014-07-27
    • 2015-12-19
    • 2017-03-10
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多