我正在使用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转换为List的内容。这就是我的尝试:
来自Unirest的My JSON看起来非常像这样:
{
"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的List。
private List<Game> games = new ArrayList<>();
public List<Game> getAllGames(){
return games;
}
我使用GET请求填充此列表,我输入了id和title。
来自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 /游戏,它返回了我在Postman上使用GET发送的游戏列表。我知道我得到了字段&#34; resource_type&#34;来自API,没有&#34; id&#34;字段,但这是一个问题,因为我认为填充选定的类字段并添加id incrementaly不会成为一个问题。
答案 0 :(得分:1)
你需要的是一种将你从请求中收到的String对象映射到HashMap的方法,这样你就可以设置你的对象属性,然后形成一个返回的列表(尽管像Jackson这样的API可以实现REST请求处理逻辑不那么痛苦了。)
这意味着首先使用response.getEntity().getContent()
从HTTP请求获取InputStream,然后按照here创建JSONParser。
这将使您能够从显示here的JSON字符串中获取属性。
反过来,这将使您能够使用setter方法创建自己的对象列表。
如果有帮助,请告诉我。
答案 1 :(得分:0)
我建议使用基于apache http api构建的http-request。您可以创建类ResponseData来解析响应。
Microsoft.CodeAnalysis.Workspaces.Common