Невозможно отобразить значение json второго уровня с помощью Spring Webflux Webclient - PullRequest
0 голосов
/ 15 января 2019

Я использую публичный API для криптовалют в Мексике: https://api.bitso.com/v3/available_books/, который возвращает json, подобный этому:

    "success": true,
    "payload": [
        {
            "book": "btc_mxn",
            "minimum_price": "500.00",
            "maximum_price": "16000000.00",
            "minimum_amount": "0.000075",
            "maximum_amount": "500.00000000",
            "minimum_value": "5",
            "maximum_value": "10000000.00"
        },
        {
            "book": "eth_btc",
            "minimum_price": "0.00000100",
            "maximum_price": "5000.00000000",
            "minimum_amount": "0.00000100",
            "maximum_amount": "1000.00000000",
            "minimum_value": "0.00000100",
            "maximum_value": "2000.00000000"
        },

и код, который использует его с Webclient:

    @Override
    public Mono<Coins> getCoins() {
        return webClient.get().uri("https://api.bitso.com/v3/available_books/")
                .accept(MediaType.APPLICATION_JSON)
                .retrieve().bodyToMono(Coins.class);
    }

POJO, которые пытаются связать это:

@Data
public class Coins {

    @JsonProperty("success")
    private String success;

    @JsonProperty("playload")
    private List<Coin> playload;

и

@Data
public class Coin {

    @JsonProperty("book")
    private String book;

    @JsonProperty("minimum_amount")
    private String minimumAmount;

    @JsonProperty("maximum_amount")
    private String maximumAmount;

    @JsonProperty("minimum_price")
    private String minimumPrice;

    @JsonProperty("maximum_price")
    private String maximumPrice;

    @JsonProperty("minimum_value")
    private String minimumValue;

    @JsonProperty("maximum_value")
    private String maximumValue;

Пока что это только карты, подобные этой

"success": true,
"payload": null

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Вам нужно создать конструкцию без аргументов и изменить слово playload на payload:)

0 голосов
/ 15 января 2019

ИСПРАВЛЕНО: Опечатка при воспроизведении имени свойства вместо полезной нагрузки

0 голосов
/ 15 января 2019

Я не думаю, что это проблема WebFlux, а скорее проблема Джексона + Ломбок.Что произойдет, если вы попытаетесь десериализовать эту полезную нагрузку с помощью raw ObjectMapper?

Я думаю, что Джексону требуется конструктор all args, аннотированный @JsonCreator, или попросите Lombok создать @NoArgConstructor для этого класса.В любом случае, переписывание вашего Coin класса как обычного Java-класса должно работать.

Кроме того, ваш Coins класс содержит опечатку, так как он пытается получить playload вместо payload.

...