spring mvc - requestmapping - ¿Cómo obtengo el valor de mapeo de solicitud en el controlador?
spring dispatcherservlet (5)
Para Spring 3.1 y superior, puede usar 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);
}
En el controlador, tengo este código, de alguna manera, quiero obtener la búsqueda de valor de búsqueda "búsqueda". Como es posible ?
@RequestMapping("/search/")
public Map searchWithSearchTerm(@RequestParam("name") String name) {
// more code here
}
Si desea el patrón, puede intentar 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);
}
Tener un controlador como
@Controller
@RequestMapping(value = "/web/objet")
public class TestController {
@RequestMapping(value = "/save")
public String save(...) {
....
}
}
No se puede obtener el requestMapping base del controlador usando la reflexión
// Controller requestMapping
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0];
o el método requestMapping (desde dentro de un método) con reflexión también
//Method requestMapping
String methodMapping = new Object(){}.getClass().getEnclosingMethod().getAnnotation(RequestMapping.class).value()[0];
Obviamente, funciona con una solicitud de solicitud de valor único.
Espero que esto ayude.
Una forma es obtenerlo de la ruta del servlet.
@RequestMapping("/search/")
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {
String mapping = request.getServletPath();
// more code here
}
@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
}