Десериализация xml списка внутри объекта

Есть проблема с десериализацией xml списка.

POJO

@Data
public class StatusInfo {
    @JacksonXmlProperty(localName = "statusNick")
    private StatusNickEnum statusNick;

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    @JacksonXmlProperty(localName = "initDT")
    private OffsetDateTime initDT;

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    @JacksonXmlProperty(localName = "setDT")
    private OffsetDateTime setDT;

    @JacksonXmlProperty(localName = "timeoutSec")
    private Integer timeoutSec;

    @JacksonXmlElementWrapper(localName = "statusParamList")
    private List<StatusParam> statusParamList = new ArrayList<>();
}
@Data
public class StatusParam {
    @JacksonXmlProperty(localName = "name")
    private NameEnum name;

    @JacksonXmlProperty(localName = "value")
    private String value;
}

XML

<statusInfo>
    <statusNick>WAIT_SEND</statusNick>
    <initDT>2024-08-01T07:31:37.220Z</initDT>
    <setDT>2024-08-01T07:31:37.220Z</setDT>
    <timeoutSec>1000000</timeoutSec>
    <statusParamList>
        <name>HASH_CLIENT</name>
        <value>string</value>
    </statusParamList>
</statusInfo>

При десериализации выдает ошибку

MismatchedInputException: Cannot construct instance of `ru.cmx.vtb.ccgw.customscardgateway.model.StatusParam` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('HASH_CLIENT')
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 22, column: 23] (through reference chain: ru.cmx.vtb.ccgw.customscardgateway.model.RespDataMsgInfo["data"]->ru.cmx.vtb.ccgw.customscardgateway.model.RespMsgInfo["msgInfo"]->ru.cmx.vtb.ccgw.customscardgateway.model.MsgInfo["statusInfo"]->ru.cmx.vtb.ccgw.customscardgateway.model.StatusInfo["statusParamList"]->java.util.ArrayList[0])

Видимо jackson пытается десериолизовать строку name в List statusParamList = new ArrayList<>(); Как сделать так что бы jackson понимал что это список и его нужно десереализовывать как список?


Ответы (1 шт):

Автор решения: FPS Bard

Все просто оказалось - нужно было поставить флажок:

@JacksonXmlElementWrapper(localName = "statusParamList",useWrapping = false)
→ Ссылка