java - 使用 Jackson 从子元素开始反序列化 XML

标签 java xml spring jackson

我正在尝试使用 Jackson 解析一些 XML。但是,我不知道解析时如何从元素开始。此 API 调用永远不会返回多个:

<return_data api_call="get">
<users>
<user>
<username>jdoe</username>
<firstname>John</firstname>
<lastname>Doe</lastname>
<account_expiration_date>0000-00-00</account_expiration_date>
<signup_date>2015-01-01 15:00:36</signup_date>
<deleted>0</deleted>
<account_name>my account</account_name>
</user>
</users>
</return_data>

我尝试了以下操作,但收到错误“无法识别的字段“用户”...未标记为可忽略”。

@JacksonXmlRootElement(localName = "user")
@JsonIgnoreProperties(value = { "api_call" })
public class User {

@JsonProperty("username")
private String userName;

@JsonProperty("firstname")
private String firstName;

@JsonProperty("lastname")
private String lastName;

@JsonProperty("account_expiration_date")
private Date expirationDate;

@JsonProperty("deleted")
private boolean deleted;

@JsonProperty("signup_date")
private Date signupDate;

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public Date getExpirationDate() {
    return expirationDate;
}

public void setExpirationDate(Date expirationDate) {
    this.expirationDate = expirationDate;
}

public Date getSignupDate() {
    return signupDate;
}

public void setSignupDate(Date signupDate) {
    this.signupDate = signupDate;
}
}

更新: 我能够通过使用多个包装器来使其工作,但我希望有一个更简单的解决方案。

@JsonIgnoreProperties(value = { "api_call" })
public class ReturnDataWrapper {

@JacksonXmlElementWrapper(localName = "users")
@JsonProperty("users")
private UserWrapper userWrapper;

public UserWrapper getUserWrapper() {
    return userWrapper;
}

public void setUserWrapper(UserWrapper userWrapper) {
    this.userWrapper = userWrapper;
}
}

@JacksonXmlRootElement(localName = "users")
@JsonRootName("users")
public class AlertAccountWrapper {

@JacksonXmlElementWrapper(localName = "user")
@JsonProperty("user")
public User account;

public User getUser() {
    return account;
}

public void setUser(User account) {
    this.account = account;
}

}

我还从 User 类中删除了 @JacksonXmlRootElement(localName = "user") 和 @JsonIgnoreProperties(value = { "api_call"})。

最佳答案

调试此问题的常用方法是尝试相反的操作:创建您认为应该匹配的对象,将其序列化为 XML,看看它与您期望的有何不同。 这应该会提示您差异所在。

关于java - 使用 Jackson 从子元素开始反序列化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421109/

相关文章:

android - 由可绘制资源 ID #0x7f02007e 中的 : android. content.res.Resources$NotFoundException : File res/drawable/ic_email_black. xml 引起

java - 如何为log4jdbc配置log4j2.xml?

java - JNDI 查找失败(Spring、JBoss)

java - 在 'when' 子句 :Drools 中获取规则名称

java - 从 android 字符串中删除空字符

java - 尝试构建对象数组,但出现空指针异常

java - Spring mongo 动态添加条件和操作符

java - 委托(delegate)相当于 Java 中的 Obj-C

xml - 安卓工作室 : Preview rendering not appearing for all my XML files

java - Spring MVC 不明确的映射。无法映射