2017-02-16 4 views
0

Я видел много вопросов к этому, но ничто не решило мою проблему. Я использую поисковый запрос elasticsearch json для поиска моих данных с помощью spring resttemplate. Пожалуйста помоги.HttpClientErrorException: 400 Bad Request при поиске в поиске эластичности с использованием пружинного restemplate

Я делаю это в asyntask андроида

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

и я получаю это исключение

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

Какое исключение вы видите в журналах сервера ES? Также я не думаю, что ваша строка 'searchJson' верна. – Val

+0

Я использовал тот же поискJson String в расширении смысла, и он дал мне действительный результат .. также я не получил вас, что означает журналы ES-сервера. Извините, что я новичок в этом – FaisalAhmed

+0

Запрос, вероятно, одобрен, но вы не можете вставить его так же, как в Java-коде, вам нужно сделать из него настоящую строку. Я даже удивлен, что ваш код компилируется – Val

ответ

0

Ваш searchJson запрос не является действительным JSON. Я окружил его {}:

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

Я сделал это ... снова получаю такое же исключение – FaisalAhmed

0

У меня эта же проблема. Сообщение об исключении не очень полезно. Я должен сделать e.getResponseBodyAsString(), где e является исключением. Я нашел подробное сообщение об ошибке. Вы увидите, например:

{"errors":[{"code":"VALIDATION_FAILURE","source":{"pointer":"employee/attributes/child[0].role"},"detail":"... is invalid"}]} 
Смежные вопросы