【发布时间】:2014-08-21 12:17:29
【问题描述】:
我正在使用 MOXy 将传入的 JSON 解组到我的 Jersey API。我有一个具有三个属性的 POJO:databaseName、initialQuery 和 runQueryAsUser。我有一个客户向我发送一个 POST,其中 JSON 有一个我不需要的附加属性,secureQuery。当secureQuery 的值为空时,MOXy 会返回一个空对象。当secureQuery 的值为空字符串时,MOXy 返回具有三个属性集的有效对象,并且secureQuery 被正确忽略。 POJO 唯一的注解是@XmlRootElement(name = "InitialQuery")。
这是一个错误,还是我必须翻转某个设置?
方法签名:
public Response createSecuredQuery(final InitialQueryBean initialQuery) {
空 InitialQuery 对象:
{
"databaseName":"MyDatabase",
"initialQuery":"select 1",
"runQueryAsUser":"bob",
"secureQuery":null
}
良好的 InitialQuery 对象:
{
"databaseName":"MyDatabase",
"initialQuery":"select 1",
"runQueryAsUser":"bob",
"secureQuery":""
}
【问题讨论】:
-
尝试使用 moxy 天真地反序列化您的任一输入会返回“在项目中未找到具有默认根元素 databaseName 的描述符”。你确定没有带有 {"InitialQuery" : {[your input]}} 的外包装 json 吗?
-
你不能使用类似“objectMapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL)”和objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)”的东西来处理这个吗?还有” Jackson" json 提供程序提供了两个注释,您可以在 POJO 之上使用它们,它将采用空值和未知属性。例如“@JsonInclude(Include.NON_NULL)”和“@JsonIgnoreProperties(ignoreUnknown = true)”。
-
@radai 是的,我很确定。如果是这种情况,那么两个输入都不起作用,因为它们的格式相同。
-
@ripudam 我使用的是 MOXy,而不是 Jackson。我熟悉 Jackson 的功能,但这对我的问题没有帮助。