Я делаю веб-приложение, используя Giant Bomb API.
Я застрял, потому что мне нужно получить список результатов поиска из запроса GET (используя Unirest), а затем удобно преобразовать его в список объектов, называемых предложениями.
Вот где моя проблема:
private List<Suggestion> suggestions = new ArrayList<>();
public List<Suggestion> searchGames(){
HttpResponse<String> request;
try {
request = Unirest.get("http://giantbomb.com/api/search/?api_key=xxxxxxxxxxxxxxxxxxxxxxxxx&format=json&resources=game&limit=10&field_list=name&query=creed")
.header("Accept", "application/json")
.asString();
String requestString = request.toString(); //I can get my request as String, but that doesnt change much, I guess
//>>> the problematic part <<<
return suggestions;
}
Мне не хватает чего-то, что позволило бы мне преобразовать ответ JSON из Unirest в список. Вот что я пробовал:
- GSON - проблемы с форматом JSON (в начале JSON есть данные из-за полей с Limit, Offset и т.д.)
- Object Mapper (Unirest/Jackson) — проблемы, так как я получаю httpResponse вместо String/Object/JsonNode и т. д.
- используя JSONObject, JSONArray и цикл for - тоже не повезло.
Мой вызов JSON от Unirest выглядит примерно так:
{
"error": "OK",
"limit": 10,
"offset": 0,
"number_of_page_results": 1,
"number_of_total_results": 3,
"status_code": 1,
"results": [
{
"name": "Assassin's Creed",
"resource_type": "game"
},
{
"name": "The Creed",
"resource_type": "game"
},
{
"name": "Assassin's Creed: Lost Legacy",
"resource_type": "game"
}
]
}
У меня есть аналогичное решение для класса Game, где я отображаю список с именами games.
private List<Game> games = new ArrayList<>();
public List<Game> getAllGames(){
return games;
}
Я заполняю этот список, используя запросы GET, где я ввожу идентификатор и заголовок.
Предложения, поступающие от Giant Bomb API, для меня сложнее, поскольку я использую внешний API для получения списка объектов вместо ввода входных данных.
Мой класс Suggestion.java выглядит так:
package rest.library;
public class Suggestion {
private long id;
private String name;
public Suggestion(){
}
public Suggestion(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}
В моем контроллере я хочу сделать это:
@RequestMapping("/search")
public List<Suggestion> searchGames() { return gameService.searchGames(); }
Переход под localhost:8080/search должен вернуть список объектов с результатами поиска, полученными из запроса JSON. Он должен выглядеть так же, как localhost:8080/games, который возвращает мне список игр, отправленных с помощью GET на Postman. Я знаю, что я получаю поле "resource_type" из API, а поля "id" нет, но это проблема на потом, так как я думаю, что заполнение выбранных полей класса и постепенное добавление идентификатора не будет такой большой проблемой.