2016-04-07 8 views
-1

Ich verwende Google Übersetzer-API, um einen bestimmten Text zu übersetzen. Die Sprache wird über ein Dropdown-Menü ausgewählt und ihr Wert wird an das Servlet gesendet. Durch Servlet wird die Übersetzungsmethode aufgerufen. aber dann bekomme ich den folgenden Fehler.Zugriff auf 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; 


    } 

Aber wenn ich hart Code der Codewert als

String name = "ES"; 

gibt es den übersetzten Text. Als ich den Wert überprüft habe, der von Dropdown übergeben wurde, ist es nicht null. Sein Codewert wird korrekt in der Konsole ausgegeben. Hat jemand eine Idee? Vielen Dank im Voraus

Antwort

0

In der TranslatorApi Klasse trim() hinzufügen, die unnötige Leerzeichen entfernen.

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

} 
Verwandte Themen