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

Why is Jackson using the wrong element name when serializing?

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

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

为了尝试这个,我创建了以下 class...

@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{
    ...
}

但是当我连载时我得到...

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

如您所见,这里的问题是子标签应该是 account,但实际上是 accounts。我尝试使用本地名称进行修改,但找不到正确的 VooDoo 组合。我做错了什么?

我会更改 AccountsResponse 中帐户列表的注释:

public class AccountsResponse extends Payload{

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

}