2017-02-16 2 views
0

J'ai vu beaucoup de questions à ce sujet, mais rien n'a résolu mon problème. J'utilise la requête de recherche elasticsearch json pour rechercher mes données en utilisant resttemplate de printemps. S'il vous plaît aider.HttpClientErrorException: 400 Bad Request lors de la recherche dans la recherche élastique en utilisant le ressort Restangle

Je fais cela dans asyntask Android

@Override 
protected List<JobPosts> doInBackground(Object[] objects) { 
    List list = null; 

    try { 

     SearchForm searchForms = (SearchForm) objects[0]; 

     String searchJson=""; 




     String plainCreds = "*********:********"; 



     final String url = "********"; 
     RestTemplate restTemplate = new RestTemplate(); 
     restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

     HttpEntity<String> request = new HttpEntity<>(searchJson, headers); 
     Log.d("location", "before exchange"); 
     ResponseEntity<JobPosts[]> response = restTemplate.exchange(url, HttpMethod.POST, request, JobPosts[].class); 
     JobPosts[] jobPosts = response.getBody(); 

     Log.d("location", "after exchange"); 
     list = Arrays.asList(jobPosts); 


    } catch (Exception e) { 
     Log.d("location", e.getMessage()); 
    } 

et je reçois cette exception

Caused by: org.springframework.web.client.HttpClientErrorException: 400 Bad Request 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76) 
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415) 
    at in.thoughtsmith.jink.MapsActivity$SearchJob.doInBackground(MapsActivity.java:689) 
    at in.thoughtsmith.jink.MapsActivity$SearchJob.doInBackground(MapsActivity.java:647) 
    at android.os.AsyncTask$2.call(AsyncTask.java:292) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115)  
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590)  
    at java.lang.Thread.run(Thread.java:818)  
+0

Quelle exception voyez-vous dans les journaux de votre serveur ES? De plus, je ne pense pas que votre chaîne 'searchJson' soit correcte. – Val

+0

J'ai utilisé même searchJson String dans l'extension sense et cela me donne un résultat valide .. aussi je n'ai pas eu ce que signifie le journal des serveurs ES. Désolé je suis nouveau à ce – FaisalAhmed

+0

La requête est probablement ok, mais vous ne pouvez pas le coller comme ça dans le code Java, vous devez en faire une vraie chaîne. Je suis même surpris que votre code compile – Val

Répondre

0

Votre searchJson requête est pas valide JSON. Je l'ai entouré avec {}:

String searchJson="{\"query\":{\"bool\":{\"must\":[{\"match\":{\"mandatorySkills.skillName\":\"j2ee\"}}],\"filter\":[{\"geo_distance\":{\"distance\":\"50km\",\"location\":{\"lat\":19.1237818,\"lon\":72.8907772}}},{\"range\":{\"minimumExperience\":{\"lte\":6}}},{\"range\":{\"maximumExperience\":{\"gte\":6}}}]}}}"; 
+0

je l'ai fait ... obtenir la même exception à nouveau – FaisalAhmed

0

J'ai eu ce même problème. Le message d'exception n'a pas été très utile. Je dois faire un e.getResponseBodyAsString()e est l'exception. J'ai trouvé le message d'erreur détaillé. Vous verrez l'erreur comme:

{"errors":[{"code":"VALIDATION_FAILURE","source":{"pointer":"employee/attributes/child[0].role"},"detail":"... is invalid"}]}