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/abco /jsonllamar al mismo método.
Una solución obvia declarar typecomo 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=aao /json?track=rrfuncionará

@RequestMappingdos valores como en: stackoverflow.com/questions/17821731/…@PathVariablea@RequestParamSi está utilizando Spring 4.1 y Java 8, puede usar
java.util.Optionalque se apoya en@RequestParam,@PathVariable,@RequestHeadery@MatrixVariableen 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 = falseahora: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