2016-04-07 33 views
-1

Belirli bir metni çevirmek için google çevirici API kullanıyorum. dil açılır menüden seçilir ve değeri sunucuya gönderilir. Servlet çeviri yöntemi ile denir. ama sonra aşağıdaki hatayı alıyorum.Google Translator API'ye erişme

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

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; 


    } 

Ama

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

eğer sert kod

olarak kod değeri
String name = "ES"; 

Çevrilen metni verir. Açılırken geçen değeri kontrol ettiğimde, boş değil. Kod değeri konsolda doğru şekilde basılmıştır. Herhangi bir fikri olan var mı?

cevap

0

TranslatorApi sınıfında gereksiz boşlukları kaldıran trim() ekleyin.

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

}