解组具有null值的未知属性的JSON

时间:2014-08-21 12:17:29

标签: java jersey moxy

我使用MOXy将传入的JSON解组到我的Jersey API。我有一个包含三个属性的POJO:databaseName,initialQuery和runQueryAsUser。我有一个客户端向我发送一个POST,其中JSON有一个我不需要的附加属性,secureQuery。当secureQuery的值为null时,MOXy会返回一个null对象。当secureQuery的值为空字符串时,MOXy返回一个有效对象,其中设置了三个属性,并且正确忽略了secureQuery。 POJO唯一的注释是@XmlRootElement(name = "InitialQuery")

这是一个错误,还是某个地方我必须翻转?

方法签名:

public Response createSecuredQuery(final InitialQueryBean initialQuery) {

Null InitialQuery对象:

{
    "databaseName":"MyDatabase",
    "initialQuery":"select 1",
    "runQueryAsUser":"bob",
    "secureQuery":null
}

Good InitialQuery对象:

{
    "databaseName":"MyDatabase",
    "initialQuery":"select 1",
    "runQueryAsUser":"bob",
    "secureQuery":""
}

2 个答案:

答案 0 :(得分:1)

我对MOXy不太熟悉,但您对@XmlRootElement的引用表明您正在使用JAXB注释来控制您的编组。尝试将以下属性添加到您的POJO:

@XmlAnyElement(lax="true")
public Object[] unknown; // name it whatever you want

对于任何收到但未被POJO中任何其他声明/注释属性覆盖的值,这基本上都是一个包罗万象。有关详细信息,请参阅JAXB documentation

类似的@XmlAnyAttribute也可能有用,具体取决于MOXy如何翻译输入(元素属性)。有一些歧义,因为这些注释是为编组/从XML而不是JSON编组而设计的。

答案 1 :(得分:-1)

除了@XMLRootELement之外,对pojo中的所有属性使用@XmlElement。

对于 secureQuery 属性,请使用 @XmlElement(defaultValue ="")

如果它为null,这将提供一些值。

查看此链接: http://docs.oracle.com/javaee/7/api/javax/xml/bind/annotation/XmlElement.html#defaultValue%28%29