我们正从泽西岛1队转移到泽西岛队2号队。 到目前为止,我们使用的ContextResolver配置如下:
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONConfiguration.MappedBuilder;
@Provider
@Produces("application/json")
public class JSONJAXBContextResolver implements ContextResolver<Class<?>> {
@Override
public JAXBContext getContext(Class<?> objectType) {
MappedBuilder mapped = JSONConfiguration.mapped();
mapped.arrays("Property"); //$NON-NLS-1$
mapped.arrays("option"); //$NON-NLS-1$
JSONConfiguration build = mapped.xml2JsonNs(NamespacesMapper.getNamespacesMap()).build();
return new JSONJAXBContext(build, objectType);
}
}
一切都很好,生成的json看起来像这样(根xml元素被解包,即删除): {“@ id”:“as213”,“code”:“ERR12”,“cause”:{“validationMessages”:{“validationMessage”:{“message”:“some message”,“details”:“some details” “严重性”: “ERROR”}}}}
然而,对于泽西2,没有更多的JSONConfiguration.mapped()。 相反,我们正在考虑放弃做同样事情的方式。 所以我们现在有:
@Provider
@Produces("application/json")
public class JSONJAXBContextResolver implements ContextResolver<Class<?>> {
@Override
public JAXBContext getContext(Class<?> objectType) {
MappedJettisonBuilder mappedJettison = JettisonConfig.mappedJettison();
mappedJettison.serializeAsArray("Property"); //$NON-NLS-1$
mappedJettison.serializeAsArray("option"); //$NON-NLS-1$
JettisonConfig build = mappedJettison.xml2JsonNs(NamespacesMapper.getNamespacesMap()).build();
return new JettisonJaxbContext(build, objectType);
}
然而,这会产生以下结果: {“error”:{“@ id”:“as213”,“code”:“ERR12”,“cause”:{“validationMessages”:{“validationMessage”:{“message”:“some message”,“details” :“一些细节”,“严重性”:“错误”}}}}}
注意“root”元素“error”。这打破了我们的JSON表示时间。
我花了将近2天时间试图弄清楚如何配置Jettison以排除xml根元素,但无济于事。
我在JettisonConfig javadoc中注意到以下内容: https://jersey.java.net/apidocs/2.1/jersey/org/glassfish/jersey/jettison/JettisonConfig.html#DEFAULT
public static final JettisonConfig DEFAULT
The default JettisonConfig uses JettisonConfig.Notation.MAPPED_JETTISON notation with root unwrapping option set to true.
然而,即使使用DEFAULT配置而不是Mapped也不会生成所需的json - 根“error”元素仍然存在。
我甚至在Jettison源代码中查找控制此行为的配置属性,但找不到任何内容。
有没有人知道怎样以及是否有可能让Jettison忽略根XML元素?