Десериализация 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)