2015-11-03 53 views
0

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

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

由于JsonValue是标准javax.json.JsonValue,我期待莫西调集/解组开箱的,而不是我一个普通的字符串:

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

,我期待这样的:

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

解组时,data变成null。我如何使用JsonValue s并让Moxy像预期的那样管理它们?

(我需要坚持使用默认新泽西/莫西,所以没有使用其他库。)

回答

0

注:这不是一个答案(对于OP解决方案)。我在阅读之前打出了“我需要坚持使用默认Jersey/MOXy”。将改变为评论,但有太多东西。我将留给未来的读者。

javax.json类有different provider。 MOXY不知道如何以你期望的方式处理它们。没有看任何源代码,我猜想你看到的是JsonValue实例中的toString()的值。这是如果类型无法处理会发生什么。您只需拨打toString()

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

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

+0

我也改变为杰克逊。在试图坚持使用MOxy是因为它是泽西岛的新默认JSON提供商之后,我遇到了麻烦,在我切换之前遇到了更多麻烦,并且从未遇到任何其他问题。 – Filip