2017-02-16 30 views
0

我已經看到很多問題,但沒有解決我的問題。我正在使用elasticsearch搜索查詢json來使用spring resttemplate搜索我的數據。請幫忙。HttpClientErrorException:400在使用彈簧搜索彈性搜索時搜索不好的請求

我在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字符串,它給了我有效的結果..我也沒有給你什麼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"}]}