2010-09-26 14 views
14

W kontrolerze, mam ten kod, w jakiś sposób, chcę uzyskać żądanie Mapowanie wartości "szukaj". Jak to jest możliwe?Jak uzyskać wartość requestmapping w kontrolerze?

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

można rozszerzyć na przypadek użycia proszę? Próbuję dowiedzieć się, co próbujesz dostać tutaj, ponieważ wyszukiwanie nie wydaje się przydatne poza logowaniem lub używaniem pełnej ścieżki, w takim przypadku możesz po prostu uzyskać ścieżkę z żądania, tak jak polecono zestawowi – walnutmon

Odpowiedz

15

Jednym ze sposobów jest uzyskanie go ze ścieżki serwletu.

@RequestMapping("/search/")  
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {  
String mapping = request.getServletPath(); 
     // more code here  
} 
1
@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 
} 
17

Jeśli chcesz wzorca, można spróbować 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); 

} 
7

Mając kontroler jak

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

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

Cant uzyskać requestMapping bazowy kontroler przy użyciu odbicia

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

lub requestMapping sposób (z wewnątrz metody) z odbiciem zbyt

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

Oczywiście współpracuje z w requestMapping jedną wartość.

Mam nadzieję, że to pomoże.

+0

przydaje się to przy używaniu abstrakcyjnego kontrolera bazowego z wewnętrzną logiką wymagającą mapowania żądań dziedziczenia, betonu, klas kontrolerów. –

+0

RequestMapping nie? http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html – vzamanillo

0

na wiosnę 3,1 i powyżej można użyć 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); 
    } 
Powiązane problemy