使用 Jackson 将对象作为其属性之一进行编组(至于值对象,即原始类型包装器)
Marshal an object as one of its properties with Jackson (as for value objects i.e primitive types wrappers)
编辑: 以前的答案不起作用(它仍然创建嵌套对象)
我正在使用 Jersey 和 Jackson。
我得到了一个 class 赞
@XmlAccessorType(XmlAccessType.NONE)
public class Name {
private String value;
@XmlValue
public String getValue(){...}
public void setValue(String value){...}
}
用作
public class Person{
@XmlElement(name = "IDName")
public Name getName(){...}
}
我想将 Name 对象编组为它的标识属性的值。
我怎样才能做到这一点?
<Person>
<IDName>foo</IDName>
</Person>
而不是
<Person>
<IDName>
<Value>foo</Value>
</IDName>
</Person>
我曾尝试在 Person 中指示 Name 对象应编组为 itself.getValue() 并在 Name class 中指示在没有任何元素包装器的情况下编组(直接其字段)运气不好。
一种可能的解决方案是用 Jackson 的 @JsonValue 替换 @XmlValue 注释以使其工作(已测试)。
我从http://wiki.fasterxml.com/JacksonJAXBAnnotations推断,它可能是目前唯一的解决方案
根据这个官方文档
@javax.xml.bind.annotation.XmlValue
The field/property to which this annotation is applied will be named "value".
所以这可能受设计限制。任何更好的答案,特别是如果单独使用 JAXB 注释,将不胜感激
编辑: 以前的答案不起作用(它仍然创建嵌套对象) 我正在使用 Jersey 和 Jackson。
我得到了一个 class 赞
@XmlAccessorType(XmlAccessType.NONE)
public class Name {
private String value;
@XmlValue
public String getValue(){...}
public void setValue(String value){...}
}
用作
public class Person{
@XmlElement(name = "IDName")
public Name getName(){...}
}
我想将 Name 对象编组为它的标识属性的值。 我怎样才能做到这一点?
<Person>
<IDName>foo</IDName>
</Person>
而不是
<Person>
<IDName>
<Value>foo</Value>
</IDName>
</Person>
我曾尝试在 Person 中指示 Name 对象应编组为 itself.getValue() 并在 Name class 中指示在没有任何元素包装器的情况下编组(直接其字段)运气不好。
一种可能的解决方案是用 Jackson 的 @JsonValue 替换 @XmlValue 注释以使其工作(已测试)。 我从http://wiki.fasterxml.com/JacksonJAXBAnnotations推断,它可能是目前唯一的解决方案
根据这个官方文档
@javax.xml.bind.annotation.XmlValue
The field/property to which this annotation is applied will be named "value".
所以这可能受设计限制。任何更好的答案,特别是如果单独使用 JAXB 注释,将不胜感激