使用 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 注释,将不胜感激