Привет! Я использую Spring Web Client для доступа к Taste Dive REST API .
Вот метод, который я использую для доступа к конечной точке
public TasteDiveItemDto getReccs(Collection<Book> bookCollection) {
String parameters = "";
for(Book b : bookCollection)
parameters = parameters + "book:" + b.getTitle() + "%2C";
// remove the %2C at end of string
parameters = parameters.substring(0, parameters.length() - 3);
logger.info("Parameters = " + parameters);
// We want 2 reccs for every 1 book in the collection
int limit = bookCollection.size() * 2;
String req = "/similar" + "?q=" + parameters + "&" + "k=" + API_KEY + "&" + "limit=" + Integer.toString(limit);
logger.info("req = " + req);
logger.info("Accessing TasteDive API...");
return CLIENT.get().uri(req).retrieve().bodyToMono(TasteDiveItemDto.class).block();
}
А вот мои POJO
public class TasteDiveItemDto {
@JsonProperty("Similar")
private Similar similar;
public Similar getSimilar() {
return similar;
}
public void setSimilar(Similar similar) {
this.similar = similar;
}
@Override
public String toString() {
return "TasteDiveItemDto [similar=" + similar + "]";
}
}
public class Similar {
@JsonProperty("Info")
private Info[] info;
@JsonProperty("Results")
private Info[] results;
public Info[] getInfo() {
return info;
}
public void setInfo(Info[] info) {
this.info = info;
}
public Info[] getResults() {
return results;
}
public void setResults(Info[] results) {
this.results = results;
}
@Override
public String toString() {
return "Similar [info=" + Arrays.toString(info) + ", results=" + Arrays.toString(results) + "]";
}
}
public class Info {
@JsonProperty("Name")
private String name;
@JsonProperty("Type")
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Info [name=" + name + ", type=" + type + "]";
}
}
Вот что я получаю от конечной точки, когда использую свой метод toString
TasteDiveItemDto
[
similar=
Similar
[
info=
[
Info
[
name=book:chemistry%2cbook:norwegian wood%2cbook:infinite jest%2cbook:flowers for algernon,
type=unknown
],
Info
[
name=book:chemistry%2cbook:norwegian wood%2cbook:infinite jest%2cbook:flowers for algernon,
type=unknown
]
],
results=[]
]
]
Итак, в сущности, отображаются параметры, которые я помещаю в конечную точку, а не правильный ответ JSON. Я пытался использовать @JsonProperty для методов и полей, но безуспешно.
Я все еще новичок в Spring и читаю лишь небольшую часть документации по веб-клиенту, поэтому не могу полностью понять, что я делаю неправильно. Странно то, что когда я использовал веб-клиент для доступа к API Google Книг, используя ту же методологию, он работал отлично.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация из моей программы. Спасибо!