Spring Web Client неправильно привязывает JSON к POJO? - PullRequest
0 голосов
/ 19 апреля 2020

Привет! Я использую 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 Книг, используя ту же методологию, он работал отлично.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация из моей программы. Спасибо!

...