gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:44:56 28 4
gpt4 key购买 nike

Jackson 抛出 jackson.databind.JsonMappingException:由于属性和属性中的名称相同,属性“NewStatus”的 getter 定义发生冲突。

我尝试在解析过程中更改属性名称,使用“拐杖”将“NewStatus”交换为“New_Status”,但这会导致很多不同的问题。

<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;
}
}

我希望 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>

如果你仔细观察,<newStatus ...>尽管付出了几番努力,情况还是有所不同。这是小问题。您可以相应地更改标签名称和变量名称。

此外,我在我的 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>

希望这篇文章对您有用。

关于java - 如何反序列化属性和属性中具有相同名称的 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56491766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com