2013-04-03 126 views
0

我在我的应用程序中将Spring RestTemplate与Google Translate API一起使用,它工作正常,直到我使用GET http请求。但是,如果我获得大量数据,该服务将返回414错误(Request-URI太大)。Spring RestTemplate POST with Google Translate API

所以我决定使用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创建类似的代码,所以我知道这种方式应该工作。 请帮我解决这个问题。

+0

只是一个猜测,你可以尝试使用MultiValueMap作为机构HttpEntity –

回答

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