Я пытаюсь вызвать внешний API из моего приложения, используя Spring * WebClient
. При использовании curl этот вызов возвращает следующий ответ:
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="https://somestorage.blob.core.windows.net/" ContainerName="mycon">
<Prefix>my/prefix/v</Prefix>
<Delimiter>/</Delimiter>
<Blobs>
<BlobPrefix>
<Name>my/prefix/v1.0/</Name>
</BlobPrefix>
<BlobPrefix>
<Name>my/prefix/v1.1/</Name>
</BlobPrefix>
</Blobs>
<NextMarker />
</EnumerationResults>
Ниже приведен код, который я использую для того же запроса, используя WebClient
:
Mono<EnumerationResultsDto> response = webclient.get()
.uri(uri)
.headers(myHeaders)
.retrieve()
.bodyToMono(EnumerationResultsDto.class);
Здесь это становится интересным. Если я изменю EnumerationResultsDto
на String
и распечатываю результаты после response.block()
, ожидаемый ответ будет напечатан. Но если я использую свой EnumerationResultsDto
, я получаю обычный объект, заполненный нулевыми полями. EnumerationResultsDto
записывается следующим образом:
@Data // lombok annotation that provides getters & setters (among other things)
@XmlRootElement(name = "EnumerationResults")
@XmlAccessorType(XmlAccessType.NONE) // Have also tried XmlAccessType.FIELD
class EnumerationResultsDto {
@XmlAttribute(name = "Prefix")
private String prefix;
@XmlAttribute(name = "Delimiter")
private String delimiter;
}
В этом случае, когда я печатаю result.block()
, он печатает EnumerationResultsDto(prefix=null, delimiter=null, enumResults=null)
. Опять же, однако, если я изменю EnumerationResultsDto
на String
, я получу следующий ответ:
<?xml version="1.0" encoding="utf-8"?><EnumerationResults ServiceEndpoint="https://somestorage.blob.core.windows.net/" ContainerName="mycon"><Prefix>my/prefix/v</Prefix><Delimiter>/</Delimiter><Blobs><BlobPrefix><Name>my/prefix/v1.0/</Name></BlobPrefix><BlobPrefix><Name>my/prefix/v1.1/</Name></BlobPrefix></Blobs><NextMarker /></EnumerationResults>
Я в растерянности из-за того, что я делаю неправильно.