Jersey 2 JSON丢弃展开根元素
我们正在从泽西岛1号迁移到泽西岛2号。 到目前为止,我们使用的ContextResolver配置如下:Jersey 2 JSON丢弃展开根元素,json,rest,jaxb,jax-rs,jersey-2.0,Json,Rest,Jaxb,Jax Rs,Jersey 2.0,我们正在从泽西岛1号迁移到泽西岛2号。 到目前为止,我们使用的ContextResolver配置如下: import com.sun.jersey.api.json.JSONConfiguration; import com.sun.jersey.api.json.JSONConfiguration.MappedBuilder; @Provider @Produces("application/json") public class JSONJAXBContex
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);
}
}
但是,对于jersey 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);
}
注意“root”元素“error”。这大大破坏了我们的JSON表示
我花了将近两天的时间试图弄清楚如何配置抛弃以排除xml根元素,但没有效果
我注意到,在DettisonConfig javadoc中有以下内容:
但是,即使使用默认配置而不是映射也不会生成所需的json—根“error”元素仍然存在
我甚至在抛弃源代码中查找了控制此行为的配置属性,但找不到任何内容
有人知道如何以及是否有可能使抛弃忽略根XML元素吗 嗨,我最近面临这个问题。你找到解决方法了吗?遗憾的是没有。继续使用jersey 1自定义json表示的唯一方法是重用jersey 2中jersey 1附带的json提供程序。你能告诉我应该在jersy 2中添加哪些JAR,以便忽略根标记吗?目前的抛弃依赖项是jersey media json抛弃version
2.23.1
。。。我没有找到一种方法来打开根元素与任何供应商-抛弃,杰克逊或莫西。我必须获得jersey 1代码并手动创建自己的jersey 2 json提供程序,以便保留jersey 1 json表示。
@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":"some details","severity":"ERROR"}}}}}
public static final JettisonConfig DEFAULT
The default JettisonConfig uses JettisonConfig.Notation.MAPPED_JETTISON notation with root unwrapping option set to true.