【问题标题】:Using Spring MVC and Kotlin, why does this Body is ignored?使用 Spring MVC 和 Kotlin,为什么忽略这个 Body?
【发布时间】:2019-08-12 11:21:46
【问题描述】:

我想知道为什么这段代码运行但没有按应有的方式过滤数据。 邮递员中的相同请求有效,但在 Kotlin 中却没有发生什么? 目标是按时间戳值过滤数据。

val getFiltered = restTemplate.exchange(
    "https://X.X.X.X:6200/ble_flow-$da/_search/?size=50&pretty=1",
    HttpMethod.GET, HttpEntity("{\\r\\n\\\"query\\\": { \\r\\n    \\\"bool\\\": { \\r\\n      \\\"filter\\\": [ \\r\\n        { \\\"range\\\": { \\\"timestamp\\\": { \\\"gte\\\": \\\"2019-08-12T06:00:00\\\",\\\"lt\\\":\\\"2019-08-12T011:00:00\\\"}}} \\r\\n      ]\\r\\n    }\\r\\n  }\\r\\n}", headers), 
    ResultsFlow::class.java)
println(getFiltered)

如果我能改造身体就可以解决问题了:

{
"query": { 
    "bool": { 
      "filter": [ 
        { "range": { "timestamp": { "gte": "2019-08-12T06:00:00","lt":"2019-08-12T07:00:00"}}} 
      ]
    }
  }
}

进入url查询。但我真的不知道该怎么做。 谢谢。

【问题讨论】:

    标签: java elasticsearch kotlin get resttemplate


    【解决方案1】:

    Spring RestTemplate 不会在 GET 请求中发送您的正文,因为 GET 请求不应包含正文,而是使用查询参数。在此处阅读更多信息HTTP GET with request body

    因此,Elasticsearch API 还允许 POST 发送带有正文的查询。我建议将此作为您的第一个解决方案: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html

    HTTP GET 和 HTTP POST 都可以用来执行带有正文的搜索。由于并非所有客户端都支持带正文的 GET,因此也允许使用 POST。

    如果你真的想使用 Spring RestTemplate 的 GET 请求来传输你需要替换和扩展 RequestFactory 的主体。您可以在 this blog post 中找到适合您情况的示例。

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 2015-07-15
      • 1970-01-01
      • 2020-01-07
      • 2021-03-11
      • 2016-08-21
      • 2018-06-14
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多