我使用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":""
}
答案 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