Java 如何反序列化属性和属性中具有相同名称的xml?
Jackson抛出Jackson.databind.JsonMappingException:属性“NewStatus”的getter定义冲突,因为属性和属性中的名称相同 我试图在解析过程中更改属性名,使用“拐杖”在“New_Status”上交换“NewStatus”,但这会导致许多不同的问题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
<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
希望这篇文章对你有用