将GraphQL响应映射到Java/Spring中的类



我在映射GraphQL响应到一个类时遇到了一些麻烦,我可能错过了一些明显的东西,所以我想我需要另一双眼睛来检查我的代码。

我有一个像这样的响应:

{
"data": {
"Area": [
{
"id": "1"
},
{
"id": "2"
}
]
}
}

我的消费者和客户是这样的:

public class Consumer {
private final WebClient webClient;
private static final String QUERY = "query { Area { id }}";
public Consumer(WebClient webClient) {
this.webClient = webClient;
}
public AreaResponse.AreaData getAreas() {
var request = new GraphQLRequest(QUERY, null);
var res = webClient.post()
.bodyValue(request)
.retrieve()
.bodyToMono(AreaResponse.class)
.block();
return res.getData();
}
}

最后是我的回应dto:

@Data
public class AreaResponse {
private AreaData data;
@Data
public class AreaData{
private Collection<Area> Area;
@Data
public class Area{
private String id;
}
}
}

如果我将响应映射到String.class,我将获得与Postman相同的数据,因此查询或端点没有任何错误。但是当我尝试映射到AreaResponse时,Area对象是空的。我不确定响应类中的层次结构是否正确,或者我是否应该将集合向下移动一步?

我认为问题来自于在响应中使用大写Area。默认情况下,Jackson将尝试将所有内容映射到类名的小写版本(或小写camelcase)。

修复方法之一:

@JsonProperty("Area")
private Collection<Area> Area;

注:嵌套类/内部类可以是静态的,所以public static class AreaData

最新更新