我正在开发一个JAX-RS项目。我使用Jackson的ObjectMapper面临JSON到JAXB转换的问题。
使用的技术/框架是 - - 泽西岛2.23.2 - 杰克逊(FasterXML)2.8.5 - JAXB 2.2
为了使REST服务通用,我使用LinkedHashMap作为方法参数而不是pojo。因此,整个json数据被jersey / jackson框架转换为LinkedHashMap,我将在REST服务中作为参数获取。稍后在流程中,我会根据具体情况将其转换为适当的JAXB对象。
问题在于转换为JAXB时所有IDREF字段。
对于以下XSD片段 -
<xsd:attribute name="ref" type="xsd:IDREF">
</xsd:attribute>
JAXB的xjc工具在JAXB类中生成以下Java代码片段 -
@XmlAttribute(name = "ref")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
protected Object ref;
此IDREF(@XmlIDREF)带注释的字段应该实际上具有对同一根JAXB对象的对象图中某处的另一个子对象的引用。另一个对象将被指定为ID(@XmlID),如下面的代码片段 -
@XmlID
@XmlSchemaType(name = "ID")
protected String objectKey;
及其等效的xsd片段是 -
<xsd:attribute name="ObjectKey" type="xsd:ID" .....>
</xsd:attribute>
转换后,而不是'ref'字段中对Java对象的实际引用,它引用了相应的LinkedHashMap本身。基本上由于'ref'是'Object'类型,Jackson的ObjectMapper将其设置为as-is而不反省@XmlIDREF注释。在从XML转换为JAXB时,JAXB的unmarshaller正确处理了这个问题。但杰克逊的ObjectMapper在从json转换为JAXB时似乎并没有解决这个问题。
我已经尝试在Jackson的ObjectMapper中注册JaxbAnnotationIntrospector,但唯一的区别是,IDREF字段具有String值而不是LinkedHashMap。
我不确定我是否遗漏了什么。
任何解决方案都会非常有用。
答案 0 :(得分:0)
我创建了一个通用组件来解决此ID ref问题,该问题将对每个ID和ID ref进行内部检查并加以解决。
如果需要此组件,请告诉我。