我有一个复杂的 API 请求,需要将 JSON 数据传递给 Ignite ComputeTask,但我似乎只能通过 URL 查询字符串传递数据,这看起来很尴尬,并且可能会受到限制。我有两个问题:
Ignite REST API 是否有最大 GET 请求限制,如果有,有没有办法增加它?
有没有办法通过 POST 请求传入 JSON 数据?我已经尝试过
ConnectorMessageInterceptor
,但args
参数只是p1
查询字符串中的值。
如果您可以将 JSON 数据作为 GET 参数传入,您可以使用 设置连接器配置中的码头配置中的最大 GET 大小<Set name="requestHeaderSize">BYTES</Set>
,尽管这显然不是最佳解决方案。
简短的回答是否定的,在 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.GridJettyRestProtocol
ignite-rest-http 库中的文件,Ignite 将在启动时自动获取. 换成GridJettyRestProtocol
你GridJettyRestHandler
自己的定制AbstractHandler
接受 POST 数据。请记住将 jetty 作为项目依赖项导入。
application/x-www-form-urlencoded
里面做 POST 吗?