#json #rest #jetty #ignite
#json #rest #причал #ignite
Вопрос:
У меня сложный запрос API, который должен передавать данные JSON в Ignite ComputeTask, но, похоже, я могу передавать данные только через строку запроса URL, что кажется неудобным и потенциально ограничивающим. У меня есть два вопроса:
-
Имеет ли Ignite REST API максимальный предел запроса GET, и если да, есть ли способ увеличить его?
-
Есть ли какой-либо способ передать данные JSON через POST-запрос? Я экспериментировал с
ConnectorMessageInterceptor
, ноargs
параметром является просто значениеp1
из строки запроса.
Ответ №1:
-
Если вы согласны с передачей данных JSON в качестве параметра GET, вы можете установить максимальный размер GET в вашей конфигурации jetty в конфигурации вашего соединителя с помощью
<Set name="requestHeaderSize">BYTES</Set>
, хотя это явно не оптимальное решение. -
Короткий ответ — нет, во встроенном REST API Ignite нет встроенного способа перехватывать данные тела JSON POST. Хотя документация Ignite предполагает, что вы настраиваете обработчики Jetty, реализация Jetty в Ignite 2.7 (см.
GridJettyRestProtocol
) фактически переопределяет настроенный обработчик своим собственнымGridJettyRestHandler
, который принимает запросы только в форме /ignite?cmd=cmdNameamp;p1=paramsamp;name=TaskName. Чтобы обойти это, вы можете удалить библиотеку ignite-rest-http и внедрить собственную реализацию jetty. Если это кажется слишком трудоемким и вы не возражаете против несколько хакерского решения, вы можете использовать необязательную структуру библиотеки ignite и скопировать только файлorg.apache.ignite.internal.processors.rest.protocols.http.jetty.GridJettyRestProtocol
из библиотеки ignite-rest-http, которую Ignite автоматически обнаружит при запуске.GridJettyRestProtocol
ЗаменитеGridJettyRestHandler
на свой собственный,AbstractHandler
который принимает данные POST. Не забудьте импортировать jetty как зависимость проекта.
Ответ №2:
- Вы можете предоставить свою собственную конфигурацию Jetty, которая, вероятно, позволит вам настроить ограничение на получение запроса.
- Вы действительно пытались выполнить POST с
application/x-www-form-urlencoded
помощью inside?
Комментарии:
1. Я пробовал запрос с
Content-Type: application/json
и данными json в теле сообщения.2. Re 1 — это тоже действительно не отвечает на мой вопрос — пожалуйста, укажите соответствующий параметр конфигурации.
3.
Content-Type: application/json
определенно не сработает, и это не то, что я предлагал.