2013-11-14 2 views
6

Могу ли я/** маски в середине запроса отображения, такие как: «/ некоторые/ресурсов/**/Somthing»Spring исключения запроса отображения подстановочные

Весной 3 я могу сделать это

@RequestMapping("/some/resource/**") 

на карту

/some/resource/A -> ControllerMethod1 
/some/resource/A/B -> ControllerMethod1 
/some/resource/A/B/C/D/E/F -> ControllerMethod1 

для любого количества дорожек частей

Однако это отображение слишком жадное и Виль Я не позволяют мне отобразить подменю URL @RequestMapping("/some/resource/**/somthing") на другой контроллер, такого как

/some/resource/A/somthing -> ControllerMethod2 
/some/resource/A/B/somthing -> ControllerMethod2 
/some/resource/A/B/C/D/E/F/somthing -> ControllerMethod2 

Как я могу это сделать?

ответ

7

Я думаю, что использовать этот стиль муравья в URL-адресе невозможно, потому что он остановится на следующем символе разделителя пути '/'.

Я предлагаю вам попробовать 16.3.2.2. URI Template Patterns with Regular Expressions, чтобы нанести на карту только последнюю часть запроса (еще не пробовал этот подход).

Также вы можете сопоставить остальную часть запроса с помощью PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE и применить там какое-то выражение. Check this post.

В противном случае вы должны использовать параметры запроса в соответствии с этим условием 16.3.2.6. Request Parameters and Header Values.

Вы можете ограничить согласование запросов с помощью параметров параметров запроса, таких как «myParam», «! MyParam» или «myParam = myValue». Первые два теста для определения/отсутствия параметров запроса, а третий - для определенного значения параметра. Вот пример с условием значения параметра запроса.

В этом случае вы будете карте что-то вроде того, что с помощью Params

@RequestMapping(value = {"/some/resource/**"}, params="somthing") 

или использовать параметр запроса аннотаций с не обязательным атрибутом в сигнатуре метода:

public void test(@RequestParam(value = "somthing", required=false) String str) { 
Смежные вопросы