2015-01-28 5 views
1

Я использую Spring Integration, чтобы обслуживать некоторые веб-службы REST. URL моей службы что-то вродеДополнительные параметры в Spring Integration HTTP-путь входящего шлюза

http://myhost/param1_name/param1_value/param2_name/param2_value

Конечно, у меня нет только 2 параметров, и я хотел бы, чтобы некоторые из них «по желанию».

Я нашел решение, описанное в следующей ссылке http://www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters/

К сожалению, он не работает с весны интеграции. В Spring Integration, когда я пытаюсь использовать regexp [^ /] для mach-параметра, это не работает.

Например, Firstname никогда не соответствует, как это: PATH = "/ регистр/Firstname/{FirstName: [^ /] +}/ЬавЬЫате /"

Любая идея, как достичь дополнительных параметров с помощью Spring Интеграция?

ответ

1

У меня была дискуссия с Россеном Стоянчевым по этому вопросу, и он нашел ваш первоначальный подход неправильным. Вот его слова:

Путь должен отражать иерархию ресурсов REST. Обеспокоенность, такая как кодировка и тип содержимого, не существует. Они являются сквозными и могут применяться к любому URL-адресу. Представьте себе REST API, который поддерживает /encoding/utf-8/format/pdf по каждому URL-адресу. В Spring MVC мы даже поддерживаем согласование контента по параметру запроса (например, format=pdf) или расширение файла (.pdf) в качестве первоклассных механизмов, альтернативных использованию заголовка (на основе ContentNegotiationStrategy). Это обычная практика, и я не могу представить, почему кто-то мог подумать о том, чтобы помещать такую ​​информацию в переменные пути.

У него есть пример с firstName и факультативно lastName. Я тоже не думаю, что это хорошая идея. Прежде всего имена могут меняться, даже если не часто. Также подумайте обо всех местах, где человек может появиться в REST API. Теперь вам нужно будет поддерживать firstName с опциональным lastName везде. Например. /person/{firstName}/{lastName}/children/{firstName}/{lastName}.

Кажется, что оба примера пытаются помещать случайные данные в путь URL-адреса, который относится к параметрам запроса или телу запроса. Путь должен отражать иерархию ресурсов.

BTW в статье, на которую делается ссылка, фактически говорит, что JAX-RS не поддерживает дополнительные переменные пути. Он описывает это как хак.

Таким образом, было бы лучше, если вы можете переместить эти optinal части к запросу Params и имеют некоторые общие path, чтобы отобразить их всех. Или ... @RequestMapping имеет параметр params, позволяющий сопоставлять метод с URL-адресом, если он содержит или не содержит определенные параметры.

Смежные вопросы