Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson将对象封送为其属性之一(对于值对象,即基本类型包装器)_Java_Xml_Json_Jackson - Fatal编程技术网

Java 使用Jackson将对象封送为其属性之一(对于值对象,即基本类型包装器)

Java 使用Jackson将对象封送为其属性之一(对于值对象,即基本类型包装器),java,xml,json,jackson,Java,Xml,Json,Jackson,编辑:上一个答案不起作用(它仍然会创建嵌套对象) 我用的是泽西和杰克逊 我有一门课 @XmlAccessorType(XmlAccessType.NONE) public class Name { private String value; @XmlValue public String getValue(){...} public void setValue(String value){...} } 用作 public class Person{ @XmlEl

编辑:上一个答案不起作用(它仍然会创建嵌套对象) 我用的是泽西和杰克逊

我有一门课

@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对象作为其identity属性的值。 我怎样才能做到这一点

<Person>
  <IDName>foo</IDName>
</Person>
而不是

<Person>
  <IDName>
      <Value>foo</Value>
  </IDName>
</Person>

我试图亲自指出Name对象应该作为它自己的.getValue()进行封送,或者在Name类中指出要封送而不使用任何元素包装器(直接使用它的字段),但没有运气。

一个可能的解决方案是用Jackson的@JsonValue替换@XmlValue注释以使其工作(经过测试)。 我推断这可能是目前唯一的解决办法

根据这一点,官方文件

@javax.xml.bind.annotation.XmlValue
The field/property to which this annotation is applied will be named "value".

所以可能是设计的限制。任何更好的答案,特别是如果仅使用JAXB注释,都将非常感谢

抱歉,我很难找到相同问题的措辞。谢谢,我会把它关上的!我找到了。使用jackson+jersey,我被迫使用'@JsonValue'jackson注释代替'@XmlValue'。后者不起作用。使用与我的示例中完全相同的代码并添加“@JsonValue”使其工作。我重新打开了问题。我已经更新了标题和标签,以反映这是一个Jackson问题,而不是JAXB问题,因此它不是重复的。谢谢!的确,这是一个Jackson提供者的问题,但寻求的解决方案是关于使用Jackson处理的标准JAXB注释。遗憾的是,我们需要依赖整个Jackson依赖性,因为有了这个变通方法(@JsonValue),其余的就可以完美地使用JAXB注释