Как я могу получить значение сопоставления запросов в контроллере? - PullRequest
23 голосов
/ 26 сентября 2010

В контроллере у меня есть этот код, как-то, я хочу получить запрос сопоставления значения "поиск". Как это возможно?

 @RequestMapping("/search/")     
 public Map searchWithSearchTerm(@RequestParam("name") String name) {    
        // more code here     
 }

Ответы [ 5 ]

24 голосов
/ 05 апреля 2014

Если вы хотите шаблон, вы можете попробовать HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE:

@RequestMapping({"/search/{subpath}/other", "/find/other/{subpath}"})
public Map searchWithSearchTerm(@PathVariable("subpath") String subpath,
                                             @RequestParam("name") String name) {

    String pattern = (String) request.getAttribute(
                                 HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    // pattern will be either "/search/{subpath}/other" or
    // "/find/other/{subpath}", depending on the url requested
    System.out.println("Pattern matched: "+pattern);

}
20 голосов
/ 26 сентября 2010

Кажется, вы ищете путь, которому соответствует этот запрос, и вы можете напрямую получить его из пути сервлета

@RequestMapping("/search/")     
 public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {    
String path = request.getServletPath();
        // more code here     
 }
12 голосов
/ 20 января 2016

Наличие контроллера как

@Controller
@RequestMapping(value = "/web/objet")
public class TestController {

    @RequestMapping(value = "/save")
    public String save(...) {
        ....
    }
}

Невозможно получить базовый запрос на отображение контроллера, используя отражение

// Controller requestMapping
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0];

или метод requestMapping (изнутри метода) с отражением тоже

//Method requestMapping
String methodMapping = new Object(){}.getClass().getEnclosingMethod().getAnnotation(RequestMapping.class).value()[0];

Очевидно, работает с одним значением в requestMapping.

Надеюсь, это поможет.

2 голосов
/ 28 ноября 2017

Для весны 3.1 и выше вы можете использовать ServletUriComponentsBuilder

@RequestMapping("/search/")     
     public ResponseEntity<?> searchWithSearchTerm(@RequestParam("name") String name) {  
         UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest();
         System.out.println(builder.buildAndExpand().getPath());
         return new ResponseEntity<String>("OK", HttpStatus.OK);
     }
2 голосов
/ 28 ноября 2011
@RequestMapping("foo/bar/blub")     
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {
  // delivers the path without context root 
  // mapping = "/foo/bar/blub"
  String mapping = request.getPathInfo();
  // more code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...