gpt4 book ai didi

java - 如何使用 Google API Java 客户端向 Google Shortener API 发送请求并解析 JSON 响应?

转载 作者:行者123 更新时间:2023-12-03 18:41:33 30 4
gpt4 key购买 nike

我想使用 Google Shortener API .我想使用 google api java 客户端库来发布请求并解析 JSON 响应。

接下来,我贴出我试过的代码:

import java.io.IOException; 
import net.sf.json.JSONObject;
import com.google.api.client.googleapis.GoogleHeaders;
import com.google.api.client.googleapis.GoogleTransport;
import com.google.api.client.googleapis.json.JsonCParser;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonHttpContent;
import com.google.api.client.util.GenericData;


public class GoogleShortener {
public static final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url";

public static void main(String[] args) {
// setup up the HTTP transport
HttpTransport transport = GoogleTransport.create();
// add default headers
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonCParser());
// build the HTTP GET request and URL

GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");

JsonHttpContent content = new JsonHttpContent();
content.data = data;

HttpRequest request = transport.buildPostRequest();
request.content = content;
request.setUrl(GOOGL_URL);
HttpResponse response;
try {
JSONObject json = request.execute().parseAs(JSONObject.class);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

当我执行上面的代码时,我得到下一个输出:

Exception in thread "main" java.lang.IllegalArgumentException: data key not found
at com.google.api.client.googleapis.json.JsonCParser.parserForResponse(JsonCParser.java:77)
at com.google.api.client.googleapis.json.JsonCParser.parse(JsonCParser.java:47)
at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:261)
at GoogleShortener.main(GoogleShortener.java:43)

知道如何正确设置 JsonCParser 吗?

错误路径

一开始我没有正确设置请求内容。正如@dwb 所指出的,请求内容应该设置为:

GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");

JsonHttpContent content = new JsonHttpContent();
content.data = data;

request.content = content;

如果你没有设置正确的内容,你会得到下一个错误

com.google.api.client.http.HttpResponseException: 411 Length Required at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:209) at GoogleShortener.main(GoogleShortener.java:32)

最佳答案

您需要像这样将 JSON 内容添加到请求正文中:

GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;

对于响应,请尝试使用 JsonHttpParser 而不是 JsonCParser。您需要创建一个 GenericJson 的子类,其中包含的字段带有您要检索的每个 JSON 属性的 @Key 注释。您可以使用 response.parseAsString() 查看所有可用的属性。

这是一个完整的工作示例:

import com.google.api.client.googleapis.GoogleHeaders;
import com.google.api.client.googleapis.GoogleTransport;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.GenericJson;
import com.google.api.client.json.JsonHttpContent;
import com.google.api.client.json.JsonHttpParser;
import com.google.api.client.util.GenericData;
import com.google.api.client.util.Key;


public class Shortener {

public static final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url";

/**
* @param args
*/
public static void main(String[] args) throws Exception {
// setup up the HTTP transport
HttpTransport transport = GoogleTransport.create();
// add default headers
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonHttpParser());

// build the HTTP GET request and URL
HttpRequest request = transport.buildPostRequest();
request.setUrl(GOOGL_URL);
GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;

HttpResponse response = request.execute();
Result result = response.parseAs(Result.class);

System.out.println(result.shortUrl);
}

public static class Result extends GenericJson {
@Key("id")
public String shortUrl;
}
}

关于java - 如何使用 Google API Java 客户端向 Google Shortener API 发送请求并解析 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724270/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com