【问题标题】:HttpClientErrorException: 400 Bad Request while searching in elastic search using spring restemplateHttpClientErrorException:使用spring restemplate在弹性搜索中搜索时出现400 Bad Request
【发布时间】:2017-02-16 11:29:28
【问题描述】:

我已经看到很多问题,但没有解决我的问题。我正在使用弹性搜索搜索查询 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) 

【问题讨论】:

  • 您在 ES 服务器日志中看到什么异常?另外我认为您的 searchJson 字符串不正确。
  • 我在语义扩展中使用了相同的 searchJson 字符串,它给了我有效的结果。我也没有得到你 ES 服务器日志的含义。对不起,我是新手
  • 查询可能没问题,但是你不能像在Java代码中那样粘贴它,你需要用它制作一个真正的字符串。我什至对您的代码编译感到惊讶
  • 另外,您不应该多次发布相同的问题,我已经关闭了您之前的问题,因为它与之前的问题完全相同:stackoverflow.com/questions/42240927/… 已经有了答案。
  • 抱歉,它是动态字符串,是在用户输入技能时在运行时创建的,我不想发布该代码....我将编辑我的问题

标签: java android spring elasticsearch spring-rest


【解决方案1】:

您的查询 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}}}]}}}";

【讨论】:

  • 我这样做了......再次遇到同样的异常
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2021-07-21
    • 2019-11-21
    • 1970-01-01
    • 2014-11-04
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多