2013-04-03 119 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);