当前位置: 首页 > 知识库问答 >
问题:

HttpClientErrorException:400使用spring重新模板在弹性搜索中搜索时请求错误

叶光华
2023-03-14

我看到了很多关于这个问题的疑问,但没有解决我的问题。我使用elasticsearch json来使用SpringRESTTemplate搜索我的数据。请帮忙。

我在异步任务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个答案

公羊子真
2023-03-14

我也有同样的问题。异常消息没有多大帮助。我必须做一个e.getResponseBodyAsString(),其中e是例外。我发现了详细的错误消息。您将看到如下错误:

{"errors":[{"code":"VALIDATION_FAILURE","source":{"pointer":"employee/attributes/child[0].role"},"detail":"... is invalid"}]}
侯涵煦
2023-03-14

您的查询search chJson是无效的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}}}]}}}";
 类似资料:
  • 我编写了一个reindex方法,可以执行以下操作: 它确实起到了作用,但我现在确定,仅仅删除然后创建一个索引是否有意义。如何改进此方法?

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 我试图用Spring Boot和弹性搜索设置一个应用程序。这个应用程序已经使用Spring Data JPA存储库来持久化我的实体。当我试图在启用弹性搜索配置的情况下运行应用程序时,我遇到的问题是,当存储库被扫描时,我得到了一个异常。 我得到了以下例外: 我的存储库的定义如下: 异常似乎是由于count查询的签名导致的,该签名返回一个int。尽管这个存储库可以很好地处理JPA,但它会抛出一个异常,

  • 我是弹性搜索的新手,我正在尝试使用下面的映射创建索引,我在网上找到了这些映射,并使用kibana作为我的客户机,它抛出错误。 “类型”:“映射程序解析异常”,“原因”:“根映射定义有不受支持的参数:[local_test:{u all={enabled=false},properties={amount={type=long},user_id={type=keyword},recurtive={t

  • 由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!