将 JSON POST 数据传递给 Ignite 2.7 ComputeTask
Pass JSON POST Data to Ignite 2.7 ComputeTask
我有一个复杂的 API 请求需要将 JSON 数据传递给 Ignite ComputeTask,但我似乎只能通过 URL 查询字符串传递数据,这看起来很尴尬,而且可能有局限性。我有两个问题:
Ignite REST API 是否有最大 GET 请求限制,如果有,是否有增加限制的方法?
有什么方法可以通过POST请求传入JSON数据吗?我已经尝试过 ConnectorMessageInterceptor
,但是 args
参数只是查询字符串中 p1
的值。
- 您可以提供 your own Jetty config,这可能会让您配置 GET 请求限制。
- 你真的试过用
application/x-www-form-urlencoded
做POST吗?
如果您可以将 JSON 数据作为 GET 参数传递,您可以使用 <Set name="requestHeaderSize">BYTES</Set>
在连接器配置的码头配置中设置最大 GET 大小,虽然这显然不是最佳解决方案。
简短的回答是否定的,在 Ignite 的 built-in REST 中没有 built-in 拦截 JSON POST body 数据的方法API。尽管 Ignite 文档建议您配置 Jetty 的处理程序,但 Ignite 2.7 的 Jetty 实现(参见 GridJettyRestProtocol
)实际上用它自己的 GridJettyRestHandler
覆盖了已配置的处理程序,后者只接受 /ignite? cmd=命令名称&p1=参数&名称=任务名称。要解决此问题,您可以删除 ignite-rest-http 库并推出您自己的码头实施。如果这看起来工作量太大并且不介意有点 hacky 的解决方案,您可以搭载 ignite 的可选 lib 结构,并从 ignite-rest-http lib 复制文件 org.apache.ignite.internal.processors.rest.protocols.http.jetty.GridJettyRestProtocol
,Ignite 会自动在启动时拿起。在 GridJettyRestProtocol
中,将 GridJettyRestHandler
换成您自己接受 POST 数据的自定义 AbstractHandler
。记得导入jetty作为项目依赖
我有一个复杂的 API 请求需要将 JSON 数据传递给 Ignite ComputeTask,但我似乎只能通过 URL 查询字符串传递数据,这看起来很尴尬,而且可能有局限性。我有两个问题:
Ignite REST API 是否有最大 GET 请求限制,如果有,是否有增加限制的方法?
有什么方法可以通过POST请求传入JSON数据吗?我已经尝试过
ConnectorMessageInterceptor
,但是args
参数只是查询字符串中p1
的值。
- 您可以提供 your own Jetty config,这可能会让您配置 GET 请求限制。
- 你真的试过用
application/x-www-form-urlencoded
做POST吗?
如果您可以将 JSON 数据作为 GET 参数传递,您可以使用
<Set name="requestHeaderSize">BYTES</Set>
在连接器配置的码头配置中设置最大 GET 大小,虽然这显然不是最佳解决方案。简短的回答是否定的,在 Ignite 的 built-in REST 中没有 built-in 拦截 JSON POST body 数据的方法API。尽管 Ignite 文档建议您配置 Jetty 的处理程序,但 Ignite 2.7 的 Jetty 实现(参见
GridJettyRestProtocol
)实际上用它自己的GridJettyRestHandler
覆盖了已配置的处理程序,后者只接受 /ignite? cmd=命令名称&p1=参数&名称=任务名称。要解决此问题,您可以删除 ignite-rest-http 库并推出您自己的码头实施。如果这看起来工作量太大并且不介意有点 hacky 的解决方案,您可以搭载 ignite 的可选 lib 结构,并从 ignite-rest-http lib 复制文件org.apache.ignite.internal.processors.rest.protocols.http.jetty.GridJettyRestProtocol
,Ignite 会自动在启动时拿起。在GridJettyRestProtocol
中,将GridJettyRestHandler
换成您自己接受 POST 数据的自定义AbstractHandler
。记得导入jetty作为项目依赖