elasticsearch,kotlin,get,resttemplate,Java,elasticsearch,Kotlin,Get,Resttemplate" /> elasticsearch,kotlin,get,resttemplate,Java,elasticsearch,Kotlin,Get,Resttemplate" />

Java 使用SpringMVC和Kotlin,为什么会忽略这个主体?

Java 使用SpringMVC和Kotlin,为什么会忽略这个主体?,java,elasticsearch,kotlin,get,resttemplate,Java,elasticsearch,Kotlin,Get,Resttemplate,我想知道为什么这段代码运行,但不过滤数据,因为它应该。 同样的要求在邮递员工作,但在科特林它不知道发生了什么? 目标是按时间戳值过滤数据 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 \\\

我想知道为什么这段代码运行,但不过滤数据,因为它应该。 同样的要求在邮递员工作,但在科特林它不知道发生了什么? 目标是按时间戳值过滤数据

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查询。但我真的不知道怎么做。
谢谢。

Spring RestTemplate不会在GET请求中发送正文,因为GET请求不应该包含正文,而应该使用查询参数。请在这里阅读更多信息

因此,ElasticSearchAPI还允许POST发送带有正文的查询。我建议将此作为您的第一个解决方案:

HTTP GET和HTTP POST都可以用于执行带正文的搜索。因为不是所有的客户端都支持GET with body,所以POST也是允许的


如果您真的想使用SpringRestTemplate的GET请求来传输主体,则需要替换和扩展RequestFactory。您可以在中找到与您的案例完全相同的示例。

Spring RestTemplate不会在GET请求中发送正文,因为GET请求不应该包含正文,而是使用查询参数。请在这里阅读更多信息

因此,ElasticSearchAPI还允许POST发送带有正文的查询。我建议将此作为您的第一个解决方案:

HTTP GET和HTTP POST都可以用于执行带正文的搜索。因为不是所有的客户端都支持GET with body,所以POST也是允许的

如果您真的想使用SpringRestTemplate的GET请求来传输主体,则需要替换和扩展RequestFactory。您可以在中找到与您的案例完全相同的示例