Java 如何反序列化属性和属性中具有相同名称的xml?

Java 如何反序列化属性和属性中具有相同名称的xml?,java,xml,jackson,jackson-databind,jackson-dataformat-xml,Java,Xml,Jackson,Jackson Databind,Jackson Dataformat Xml,Jackson抛出Jackson.databind.JsonMappingException:属性“NewStatus”的getter定义冲突,因为属性和属性中的名称相同 我试图在解析过程中更改属性名,使用“拐杖”在“New_Status”上交换“NewStatus”,但这会导致许多不同的问题 <Test NewStatus="1111111"> <NewStatus Description="TestDesc"/> </Test> @Data pu

Jackson抛出Jackson.databind.JsonMappingException:属性“NewStatus”的getter定义冲突,因为属性和属性中的名称相同

我试图在解析过程中更改属性名,使用“拐杖”在“New_Status”上交换“NewStatus”,但这会导致许多不同的问题

<Test NewStatus="1111111">
    <NewStatus Description="TestDesc"/>
</Test>

@Data
public static class Test {

@JacksonXmlProperty(isAttribute = true, localName = "NewStatus")
private String newStatusAttribute;

@JacksonXmlProperty(localName = "NewStatus")
private NewStatus newStatusTag;

@Data
public static class NewStatus {

@JacksonXmlProperty(localName = "Description")
private String description;
}
}

@资料
公共静态类测试{
@JacksonXmlProperty(isAttribute=true,localName=“NewStatus”)
私有字符串newStatusAttribute;
@JacksonXmlProperty(localName=“NewStatus”)
私人新闻集团;
@资料
公共静态类NewStatus{
@JacksonXmlProperty(localName=“Description”)
私有字符串描述;
}
}

我希望Jackson解析属性和属性中的值。

似乎存在已知问题。但是,我尝试根据您的XML结构生成。找到下面的代码。这里有一个小问题,您可以对此进行更多探讨

import com.fasterxml.jackson.xml.annotate.JacksonXmlProperty;
import com.fasterxml.jackson.xml.annotate.JacksonXmlRootElement;

@JacksonXmlRootElement(localName = "NewStatus")
public class NewStatus {
  @JacksonXmlProperty(isAttribute = true)
  private String description;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}


import com.fasterxml.jackson.xml.annotate.JacksonXmlProperty;
import org.codehaus.jackson.annotate.JsonIgnore;

public class Test {
  @JacksonXmlProperty(isAttribute = true, localName = "NewStatus")
  private String statusAttribute;

  @JacksonXmlProperty(localName = "NewStatus")
  @JsonIgnore
  private NewStatus newStatus;

  public String getStatusAttribute() {
    return statusAttribute;
  }

  public void setStatusAttribute(String statusAttribute) {
    this.statusAttribute = statusAttribute;
  }

  public NewStatus getNewStatus() {
    return newStatus;
  }

  public void setNewStatus(NewStatus newStatus) {
    this.newStatus = newStatus;
  }
}
要验证的测试代码

import com.fasterxml.jackson.xml.XmlMapper;

import java.io.IOException;

public class Test1 {

  public static void main(String[] args) throws IOException {
    final XmlMapper xmlMapper = new XmlMapper();

    NewStatus newStatus = new NewStatus();
    newStatus.setDescription("TestDesc");

    Test test = new Test();
    test.setNewStatus(newStatus);
    test.setStatusAttribute("1111111");

    String xmlStr = xmlMapper.writeValueAsString(test);

    System.out.println(xmlStr);
  }
}
生成的xml如下所示

<Test NewStatus="1111111"><newStatus description="TestDesc"/></Test>

如果仔细观察,
尽管做了几次努力,但结果却不一样。这是个小问题。您可以相应地更改标记名和变量名

此外,我在maven pom.xml文件中添加了以下依赖项

<dependency>
            <groupId>com.fasterxml</groupId>
            <artifactId>jackson-xml-databind</artifactId>
            <version>0.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.1.4</version>
        </dependency>

com.fasterxml
jackson xml数据绑定
0.6.2
org.codehaus.woodstox
woodstox core asl
4.1.4

希望这篇文章对你有用。

看起来有一个已知的问题。但是,我尝试根据您的XML结构生成。找到下面的代码。这里有一个小问题,您可以对此进行更多探讨

import com.fasterxml.jackson.xml.annotate.JacksonXmlProperty;
import com.fasterxml.jackson.xml.annotate.JacksonXmlRootElement;

@JacksonXmlRootElement(localName = "NewStatus")
public class NewStatus {
  @JacksonXmlProperty(isAttribute = true)
  private String description;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}


import com.fasterxml.jackson.xml.annotate.JacksonXmlProperty;
import org.codehaus.jackson.annotate.JsonIgnore;

public class Test {
  @JacksonXmlProperty(isAttribute = true, localName = "NewStatus")
  private String statusAttribute;

  @JacksonXmlProperty(localName = "NewStatus")
  @JsonIgnore
  private NewStatus newStatus;

  public String getStatusAttribute() {
    return statusAttribute;
  }

  public void setStatusAttribute(String statusAttribute) {
    this.statusAttribute = statusAttribute;
  }

  public NewStatus getNewStatus() {
    return newStatus;
  }

  public void setNewStatus(NewStatus newStatus) {
    this.newStatus = newStatus;
  }
}
要验证的测试代码

import com.fasterxml.jackson.xml.XmlMapper;

import java.io.IOException;

public class Test1 {

  public static void main(String[] args) throws IOException {
    final XmlMapper xmlMapper = new XmlMapper();

    NewStatus newStatus = new NewStatus();
    newStatus.setDescription("TestDesc");

    Test test = new Test();
    test.setNewStatus(newStatus);
    test.setStatusAttribute("1111111");

    String xmlStr = xmlMapper.writeValueAsString(test);

    System.out.println(xmlStr);
  }
}
生成的xml如下所示

<Test NewStatus="1111111"><newStatus description="TestDesc"/></Test>

如果仔细观察,
尽管做了几次努力,但结果却不一样。这是个小问题。您可以相应地更改标记名和变量名

此外,我在maven pom.xml文件中添加了以下依赖项

<dependency>
            <groupId>com.fasterxml</groupId>
            <artifactId>jackson-xml-databind</artifactId>
            <version>0.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.1.4</version>
        </dependency>

com.fasterxml
jackson xml数据绑定
0.6.2
org.codehaus.woodstox
woodstox core asl
4.1.4
希望这篇文章对你有用