我正在使用最新的Jackson(2.2.3)和CXF应用程序。
这是我的杰克逊提供者:
public class CustomJacksonJsonProvider extends JacksonJaxbJsonProvider {
public CustomJacksonJsonProvider() {
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
JaxbAnnotationModule jaxbModule = new JaxbAnnotationModule();
mapper.registerModule(jaxbModule);
this._mapperConfig.setMapper(mapper);
}
}
我有以下带注释的课程。
@XmlType(name = "configInfo")
@XmlRootElement(name = "configInfo")
public class ConfigInfo {
@XmlElement(name = "foo")
private String foo;
@XmlElementWrapper(name = "devices")
@XmlElement(name = "device")
private List<Device> devices;
public final List<Device> getDevices() {
if (devices == null)
devices = new ArrayList<Device>();
return devices;
}
}
我创建了一个没有“foo”值的实例,以及设备列表中的一个设备。当我渲染这个时,我得到以下内容:
{"device":[{"name":"abc","type":"def"}]}
如何将“设备”呈现为“设备”?
答案 0 :(得分:0)
我已经成功解决了这个问题。关键的实现是,如果JAXB注释令杰克逊感到困惑,那么也许我应该让杰克逊忽略它们。我只是删除了“JaxbAnnotationModule”的注册,现在我的JSON和XML输出都是理智的。我现在需要考虑使用“JacksonJaxbJsonProvider”而不是更简单的提供者是否有任何意义。