繁体   English   中英

Jackson 与 Spring WebFlux

[英]Jackson with Spring WebFlux

Json:

{
    "response": {
        "count": 3,
        "items": [
            6651536,
            20410167,
            40345521
        ]
    }
}

不工作 - FriendsDTO

@Jacksonized
@Builder
@Value
public class FriendsDTO {

    int count;

    @JsonProperty("items")
    List<Integer> friends;

}

工作 - FriendsDTO :

@Jacksonized
@Builder
@Value
public class FriendsDTO {

    Response response;
    
    @Jacksonized
    @Builder
    @Value
    public static class Response {

        int count;

        @JsonProperty("items")
        List<Integer> friends;

    }

}

WebFluxClient请求:

FriendsDTO friends = webFluxClient.get()
     .uri(config.methodGetFriends(), builder -> {
           builder.queryParam("access_token", accessToken);
           builder.queryParam("v", config.version());
           return builder.build();
      })
     .accept(MediaType.APPLICATION_JSON)
     .retrieve()
     .bodyToMono(FriendsDTO.class)
     .log()
     .block();
logger.info(friends.toString());

output WORK: FriendsDTO(response=FriendsDTO.Response(count=3, friends=[6651536, 20410167, 40345521]))

output 不工作: FriendsDTO(count=0, friends=null)

如何在响应视图中摆脱这种误解以成功解析 json?

那是预期的行为

{
  name  : "name",
 description : "description"
}

这可以写成

class <ClassName>{
 private String name;
 private String description;
}

json 不带有ClassName 同样,在您的情况下,单词Response应该是一个有效的属性,就像我在此示例中定义name的方式一样。

所以,如果你愿意,这个 class 可以工作

@Jacksonized
@Builder
@Value
public class FriendsDTO {

    int count;

    @JsonProperty("items")
    List<Integer> friends;

}

你 JSON 应该从

{
    "response": {
        "count": 3,
        "items": [
            6651536,
            20410167,
            40345521
        ]
    }
}

  {
            "count": 3,
            "items": [
                6651536,
                20410167,
                40345521
            ]
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM