Avec Spring 3.0, puis-je avoir une variable de chemin facultative?
Par exemple
@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@PathVariable String type,
@RequestParam("track") String track) {
return new TestBean();
}
Ici, je voudrais /json/abc
ou /json
appeler la même méthode.
Une solution de contournement évidente à déclarer type
comme paramètre de demande:
@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();
}
et puis /json?type=abc&track=aa
ou /json?track=rr
fonctionnera
@RequestMapping
avec deux valeurs comme dans: stackoverflow.com/questions/17821731@PathVariable
le@RequestParam
Si vous utilisez Spring 4.1 et Java 8 , vous pouvez utiliser
java.util.Optional
qui est pris en charge@RequestParam
,@PathVariable
,@RequestHeader
et@MatrixVariable
dans Spring MVC -la source
"/json/{type}"
et que le type n'est pas présent, il ne sera pas touché (comme le suggère ma réponse liée), mais ici vous l'avezvalue = {"/json/{type}", "/json" }
. Donc, si l'un d'entre eux correspond à la méthode du contrôleur, il sera touché.@PathVariable(required = false)
et obtenir null si la variable n'est pas présente.Il n'est pas bien connu que vous pouvez également injecter une carte des variables de chemin en utilisant l'annotation @PathVariable. Je ne sais pas si cette fonctionnalité est disponible dans Spring 3.0 ou si elle a été ajoutée plus tard, mais voici une autre façon de résoudre l'exemple:
la source
Vous pouvez utiliser un:
pour les paramètres optionnels plutôt qu'un pathVariable
la source
Exemples de Spring 5 / Spring Boot 2:
blocage
réactif
la source
Exemple simplifié du commentaire de Nicolai Ehmann et de la réponse de wildloop (fonctionne avec Spring 4.3.3+), vous pouvez essentiellement utiliser
required = false
maintenant:la source
Vérifiez ce Spring 3 WebMVC - Variables de chemin facultatives . Il montre un article sur la création d'une extension à AntPathMatcher pour activer des variables de chemin facultatives et pourrait être utile. Tous les crédits à Sebastian Herold pour avoir publié l'article.
la source
Voici la réponse directement de la page de référence de baeldung: - https://www.baeldung.com/spring-optional-path-variables
la source
la source