Java 为什么在序列化时Jackson使用了错误的元素名?

Java 为什么在序列化时Jackson使用了错误的元素名?,java,xml,jackson,Java,Xml,Jackson,我有一个对象,我希望Jackson像这样序列化 <AccountsResponse> <accounts> <account/> <account> <userId>user</userId> ... </account> </accounts> </AccountsResponse&

我有一个对象,我希望Jackson像这样序列化

<AccountsResponse>
    <accounts>
        <account/>
        <account>
            <userId>user</userId>
            ...
        </account>
    </accounts>
</AccountsResponse>

用户
...
为了尝试这个,我创建了以下类

@Getter
@Setter
@ToString
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Payload {
    @JacksonXmlProperty(localName = "errormessage")
    private String errorMessage;
}


@Getter
@Setter
@ToString
public class AccountsResponse extends Payload{
    @JsonIgnore
    private static Logger LOGGER = LogManager.getLogger(AccountsResponse.class);

    @JacksonXmlProperty(localName = "accounts")
    private List<Account> accounts = Lists.newArrayList();
    public static AccountsResponse mapFromResultSet(ResultSet rs)
            throws SQLException
    {
        AccountsResponse response = new AccountsResponse();
        do {
            Account acct = Account.mapFromResultSet(rs);
            response.getAccounts().add(acct);
        } while (rs.next());
        return response;
    }
    public String toXml() throws JsonProcessingException {
        ObjectMapper mapper = new XmlMapper();
        return mapper.writeValueAsString(this);
    }
}

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Account extends ResultSetParser{
    ...
}
@Getter
@塞特
@托斯特林
@JsonInclude(JsonInclude.Include.NON_EMPTY)
公共类有效载荷{
@JacksonXmlProperty(localName=“errormessage”)
私有字符串错误消息;
}
@吸气剂
@塞特
@托斯特林
公共类AccountsResponse扩展了有效负载{
@杰索尼奥雷
私有静态记录器Logger=LogManager.getLogger(AccountsResponse.class);
@JacksonXmlProperty(localName=“accounts”)
private List accounts=Lists.newArrayList();
公共静态帐户Response mapFromResultSet(ResultSet rs)
抛出SQLException
{
AccountsResponse response=新AccountsResponse();
做{
Account acct=Account.mapFromResultSet(rs);
response.getAccounts().add(acct);
}while(rs.next());
返回响应;
}
公共字符串toXml()引发JsonProcessingException{
ObjectMapper映射器=新的XmlMapper();
返回mapper.writeValueAsString(this);
}
}
@吸气剂
@塞特
@JsonInclude(JsonInclude.Include.NON_NULL)
公共类帐户扩展ResultSetPasser{
...
}
但是当我连载的时候我得到

<AccountsResponse>
    <accounts>
        <accounts/>
        <accounts>
            <userId>user</userId>
            ...
        </accounts>
    </accounts>
</AccountsResponse>

用户
...

正如您所看到的,这里的问题是子标记应该是
account
,但实际上是
accounts
。我试着用localname进行黑客攻击,但找不到正确的巫毒混合体。我做错了什么?

我会在AccountsResponse中更改帐户列表上的批注:

public class AccountsResponse extends Payload{

    @JacksonXmlElementWrapper(localName = "accounts")
    @JacksonXmlProperty(localName = "account")
    private List<Account> accounts = Lists.newArrayList();

}
公共类帐户响应扩展有效负载{
@JacksonXmlElementWrapper(localName=“accounts”)
@JacksonXmlProperty(localName=“account”)
private List accounts=Lists.newArrayList();
}

请出示您的
账户
班级。