0

我在我的应用程序中使用带有 Spring RestTemplate 的Google Translate API,它工作正常,直到我使用 GET http 请求。但是,如果我有大量数据,服务将返回 414 错误(请求 URI 太大)。

所以我决定使用 POST (根据注释)。

这是我的代码:

String content = "q=Hello";
HttpHeaders headers = new HttpHeaders();
headers.set("X-HTTP-Method-Override", "GET");
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<String> request = new HttpEntity<String>(content, headers);
String response = new RestTemplate.postForObject(
    "https://www.googleapis.com/language/translate/" +
    "v2?key=<my_key>&source=en&target=ru", request, String.class);

该服务返回错误 400 错误请求,我不知道为什么。我已经使用 jQuery 成功创建了类似的代码,所以我知道这种方式应该可行。请帮我解决问题。

4

1 回答 1

2

我认为你形成 URI 的方式不正确,这就是你得到 400 的原因。查看谷歌翻译 API 文档,看起来他们期望 'q' 作为 URI 查询参数。此外,您似乎正在为 GET 执行 POST 请求。来自谷歌翻译 API 文档

GET https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world

尝试这个,

Map<String, String> queryParameters = new HashMap<String, String>();
queryParameters.put("key","my_key_here");
queryParameters.put("source","en");
queryParameters.put("target","ru");
queryParameters.put("q","Hello World");

String url =  "https://www.googleapis.com/language/translate/" +
    "v2?key={key}&source={source}&target={target}&q={q}";

HttpHeaders headers = new HttpHeaders();
headers.set("X-HTTP-Method-Override", "GET");
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

HttpEntity<String> request = new HttpEntity<String>(null, headers);

RestTemplate restclient = new RestTemplate();
String response=restclient.getForObject(url,request,String.class,queryParameters);
于 2013-04-14T02:36:52.807 回答