2017-02-16 5 views
0

나는 많은 질문을 본 적이 있지만 아무것도 내 문제를 해결했습니다. 나는 봄 resttemplate을 사용하여 내 데이터를 검색하는 elasticsearch 검색 쿼리 json을 사용하고 있습니다. 도와주세요.HttpClientErrorException : 400 잘못된 봄 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

나는 감각 확장에서 동일한 searchJson 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"}]}