Con Spring 3.0, ¿puedo tener una variable de ruta opcional?
Por ejemplo
@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@PathVariable String type,
@RequestParam("track") String track) {
return new TestBean();
}
Aquí me gustaría /json/abc
o /json
llamar al mismo método.
Una solución obvia declarar type
como un parámetro de solicitud:
@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@RequestParam(value = "type", required = false) String type,
@RequestParam("track") String track) {
return new TestBean();
}
y luego /json?type=abc&track=aa
o /json?track=rr
funcionará
@RequestMapping
dos valores como en: stackoverflow.com/questions/17821731/…@PathVariable
a@RequestParam
Si está utilizando Spring 4.1 y Java 8, puede usar
java.util.Optional
que se apoya en@RequestParam
,@PathVariable
,@RequestHeader
y@MatrixVariable
en la primavera de MVC -fuente
"/json/{type}"
y el tipo no está presente, no se golpeará (como sugiere mi respuesta vinculada), pero aquí lo tienevalue = {"/json/{type}", "/json" }
. Entonces, si alguno coincide con el método del controlador, se verá afectado.@PathVariable(required = false)
y obtener un valor nulo si la variable no está presente.No se sabe bien que también puede inyectar un Mapa de las variables de ruta utilizando la anotación @PathVariable. No estoy seguro de si esta función está disponible en Spring 3.0 o si se agregó más tarde, pero aquí hay otra forma de resolver el ejemplo:
fuente
Podrías usar un:
para parámetros opcionales en lugar de una ruta
fuente
Ejemplos de Spring 5 / Spring Boot 2:
bloqueo
reactivo
fuente
Ejemplo simplificado del comentario de Nicolai Ehmann y la respuesta de wildloop (funciona con Spring 4.3.3+), básicamente puede usar
required = false
ahora:fuente
Verifique este Spring 3 WebMVC - Variables de ruta opcionales . Muestra un artículo sobre cómo hacer una extensión a AntPathMatcher para habilitar variables de ruta opcionales y podría ser de ayuda. Todos los créditos a Sebastian Herold por publicar el artículo.
fuente
Aquí está la respuesta directamente de la página de referencia de baeldung: - https://www.baeldung.com/spring-optional-path-variables
fuente
fuente