HttpClientErrorException:使用spring restemplate在弹性搜索中搜索时出现400 Bad Request

时间:2017-02-16 11:29:28

标签: java android spring elasticsearch spring-rest

我看到很多问题,但没有解决我的问题。我使用elasticsearch搜索查询json使用spring resttemplate搜索我的数据。请帮忙。

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

我得到了这个例外

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) 

2 个答案:

答案 0 :(得分: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}}}]}}}";

答案 1 :(得分:0)

我遇到了同样的问题。异常消息不是很有帮助。我必须做一个 e.getResponseBodyAsString()其中e是例外。我发现了详细的错误消息。你会看到如下错误:

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