2016-04-07 23 views
-1

私は特定のテキストを翻訳するためにgoogle translator APIを使用しています。言語がドロップダウンから選択され、その値がサーブレットに送信されます。サーブレットの翻訳方法が呼び出されます。しかし、私は次のエラーを取得します。Google Translator APIへのアクセス

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Reque 
st 
{ 
    "code": 400, 
    "errors": [ 
    { 
     "domain": "global", 
     "message": "Invalid Value", 
     "reason": "invalid" 
    } 
    ], 
    "message": "Invalid Value" 
} 

dropdown.jsp

<form action="TextTranslation" method="post" class="form" role="form" > 
     <div class="row"> 
      <div id = "imageView" class="col-lg-8 center-block "> 

     <div class="btn-group"> 
     <select name="country"> 

      <% 

      Map<String,String> langCode = x.getCountryList(); 
      for(Object key :langCode.keySet()) 
      {%> 


      <option value="<%=(String)key%>" > <%=langCode.get(key) %> </option> 

       <% 

       System.out.println((String)key); 
      } 

      String name = request.getParameter("country"); 


      %> 



     </select> 
      <input type="hidden" name="code" value = "<%=name%>"/> 
    </div> 


       <input type="submit" class= "btn btn-image" value="Translate"> 

       <a href="#search" class="btn btn-default bg-light-gray">Search Text</a> 

      </div> 
     </div> 
      </form> 

textTranslation.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 


     PrintWriter out = response.getWriter(); 

     HttpSession extractedText = request.getSession(); 
     String imageName = (String) extractedText.getAttribute("text"); 

     System.out.println("This is "+imageName); 
    String name = request.getParameter("country"); 
    if(name == null) 
    { 
     System.out.println("null"); 
    } 
    System.out.println("I selected " +name); 
     //String name = "it"; 
     TranslatorApi translation = new TranslatorApi(); 

     String outputText = translation.getTranslate(imageName, name); 
     System.out.println("Second"+outputText); 
     request.setAttribute("outputText", outputText); 


     RequestDispatcher sndValue = request.getRequestDispatcher("/translation.jsp"); 
     sndValue.forward(request, response); 
    } 

TranslatorApi.java

private String apiKey = "AIzaSyCX2O-pteDLJLeMivT47kD9pucEv67QECQ"; 

    public String getTranslate(String textToBeTranslated, String translateLang) 
    { 
     Translate translte = null; 
     String result = null; 
     try 
     { 
      try { 
       translte = new Translate.Builder(com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(), com.google.api.client.json.gson.GsonFactory.getDefaultInstance(), null) 
       .setApplicationName("OCRProject") 
       .build(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     catch(GeneralSecurityException ex) 
     { 
      ex.printStackTrace(); 
     } 
     Translate.Translations.List list = null; 
     try { 
      list = translte.new Translations().list(Arrays.asList(textToBeTranslated),translateLang); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     list.setKey(apiKey); 
     TranslationsListResponse response = null; 
     try { 
      response = list.execute(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     for (TranslationsResource tr : response.getTranslations()) { 
      result = tr.getTranslatedText(); 
     } 
     return result; 


    } 

しかし、私はハード

0123とコード値をコーディングする場合
String name = "ES"; 

それは翻訳されたテキストを与える。私がドロップダウンで渡された値をチェックすると、nullではありません。そのコード値はコンソールに正しく表示されます。誰もが知っていますか?事前にありがとう

答えて

0

TranslatorApiクラスでは、不要なスペースを削除するadd trim()を追加しました。

public String getTranslate(String textToBeTranslated, String translateLang) 
{ 
    translateLang = translateLang.trim(); 

} 
関連する問題