Jackson引发 jackson.databind.JsonMappingException:属性“ NewStatus”的吸气剂定义冲突,因为属性和属性名称相同。
我试图在解析过程中使用“拐杖”更改属性名称,该拐杖在“ 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;
}
}
我希望Jackson从属性和属性中解析值。
答案 0 :(得分:0)
似乎存在一个已知问题。但是我尝试根据您的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>
希望这篇文章对您可能有用。