2015-11-03 75 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