我在这里遇到了一个非常简单的问题,但是现在使用谷歌超过一个小时后,我仍然找不到一个好的解决方案而且开始花费太多钱。
在我的应用程序中,我使用REST作为API,基本上只使用JSON作为有效负载类型,并使用Enunciate作为API的文档。您可能知道,enunciate将从类生成xsd架构。因此,我需要使用合适的注释配置所有DTO的Jackson / JSON处理,并使用JAXB注释来确保生成的模式是正确的,并且可以使用XJC解析为正确的类!
虽然在大多数情况下实现并不是很难实现并且完美无缺,但我有一个简单但有些特殊的情况,它完全失败了。
假设以下课程:
@JsonRootName(value = "location")
public class Location {
private String label;
@JsonUnwrapped
private Address address;
// constructors, getters, setters ommited..
}
//// new file
public class Address{
private String city;
private String street;
private String postCode;
}

这与Jackson / JSON 100%合作。嵌入的Address对象将被解包,以便JSON如下所示:
{
"label":"blah",
"street":"Exchange Road",
"city":"Stacktown"
"postCode":"1337"
}

这与杰克逊一起工作。 另一方面,JAXB能够解析(大部分)Jackson注释,因此通常您不会在两个世界中使用简单对象时遇到问题。 @JsonUnwrapped虽然遗憾的是JAXB不支持,奇怪的是(从我的POV)非常简单的用例似乎根本不能用任何JAXB注释反映。
所发生的是,生成的模式包含嵌入的Address对象,没有任何属性/元素。因此,XJC生成的类将包含该Address对象引用。这最终导致来自应用程序的错误JSON,该应用程序将使用模式生成对象......
有什么想法吗?
答案 0 :(得分:1)
JAXB (JSR-222)规范没有定义杰克逊@JsonUnwrapped
的等价物。很长一段时间以来,我们通过@XmlPath
扩展程序在EclipseLink MOXy JAXB实现中提供了该功能。
@XmlPath(".")
private Address address;
了解更多信息
我在博客上写了更多关于MOXy @XmlPath
扩展程序的内容: