0

我有一个复杂的 API 请求,需要将 JSON 数据传递给 Ignite ComputeTask,但我似乎只能通过 URL 查询字符串传递数据,这看起来很尴尬,并且可能会受到限制。我有两个问题:

  1. Ignite REST API 是否有最大 GET 请求限制,如果有,有没有办法增加它?

  2. 有没有办法通过 POST 请求传入 JSON 数据?我已经尝试过ConnectorMessageInterceptor,但args参数只是p1查询字符串中的值。

4

2 回答 2

0
  1. 如果您可以将 JSON 数据作为 GET 参数传入,您可以使用 设置连接器配置中的码头配置中的最大 GET 大小<Set name="requestHeaderSize">BYTES</Set>,尽管这显然不是最佳解决方案。

  2. 简短的回答是否定的,在 Ignite 的内置 REST API 中没有内置方法来拦截 JSON POST 正文数据。尽管 Ignite 文档建议您配置 Jetty 的处理程序,但 Ignite 2.7 的 Jetty 实现(请参阅参考资料GridJettyRestProtocol)实际上用自己的 Handler 覆盖了已配置的 Handler GridJettyRestHandler,它只接受 /ignite?cmd=cmdName&p1=params&name=taskName 形式的请求。要解决此问题,您可以删除 ignite-rest-http 库并滚动您自己的码头实现。如果这看起来工作量太大并且不介意有点 hacky 的解决方案,您可以搭载 ignite 的可选库结构,并仅复制org.apache.ignite.internal.processors.rest.protocols.http.jetty.GridJettyRestProtocolignite-rest-http 库中的文件,Ignite 将在启动时自动获取. 换成GridJettyRestProtocolGridJettyRestHandler自己的定制AbstractHandler接受 POST 数据。请记住将 jetty 作为项目依赖项导入。

于 2019-04-03T12:10:20.260 回答
-1
  1. 您可以提供自己的 Jetty 配置,这可能会让您配置 GET 请求限制。
  2. 你真的试过用application/x-www-form-urlencoded里面做 POST 吗?
于 2019-03-29T09:02:53.583 回答