【问题标题】:Spring RestTemplate POST with Google Translate APISpring RestTemplate POST 与谷歌翻译 API
【发布时间】:2013-04-03 13:31:07
【问题描述】:

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

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

这是我的代码:

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 成功创建了类似的代码,所以我知道这种方式应该可行。 请帮我解决问题。

【问题讨论】:

  • 只是一个猜测,你可以尝试使用 MultiValueMap 作为 HttpEntity 的主体

标签: java spring google-translate resttemplate


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2018-08-20
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2010-10-10
    • 2013-02-15
    相关资源
    最近更新 更多