无法使用 Spring Webflux Webclient 映射二级 json 值



我正在墨西哥使用加密货币的公共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
您需要

构造 no-args 并将单词 playload 更改为 payload :)

我不认为这是一个WebFlux问题,而是一个Jackson + Lombok问题。如果您尝试使用原始ObjectMapper反序列化该有效负载会发生什么?

我认为杰克逊需要一个用@JsonCreator注释的所有参数构造函数,或者要求龙目岛为该类创建一个@NoArgConstructor。无论如何,将Coin类重写为常规 Java 类应该有效。

此外,您的Coins类有一个错别字,因为它试图获得playload而不是payload

修复:属性名称游戏加载而不是有效负载的拼写错误

最新更新