J'ai essayé d'utiliser une variable de chemin dans le contrôleur de grails mais je ne suis pas capable de l'atteindre. L'intention est de valider le paramètre soumis à l'URL que je dois rendre obligatoire. Je ne pouvais pas le faire via RequestParam donc je suis passé à PathVariable de sorte que l'url soumise sans le param requis soit filtrée par le contrôleur de grails lui-même plutôt que moi ajoutant if/else vérifie la validité.Comment est-ce que je peux employer des variables de chemin dans le contrôleur de grails?
Donc, je peux illustrer comme ci-dessous: Mon URL est quelque chose comme ci-dessous: -
'<appcontext>/<controller>/<action>?<paramName>=<something>'
Maintenant, pour faire 'paramName' obligatoire je ne trouve pas une façon Grails (Spring MVC fournit @RequestParam annotation qui peut me permettre de 'requis' comme vrai).
Une autre alternative que j'ai pensé était d'utiliser des variables de chemin afin que 'paramName' puisse être inclus dans l'URL elle-même. J'ai donc essayé comme suit:
'<appcontext>/<controller>/<action>/$paramName'
Pour valider l'URL ci-dessus, j'ai écrit cartographie spécifique, mais certains comment cela ne fonctionne pas trop ..
la mise en correspondance qui suit est spécifique, j'ai écrit: -
"/<controllerName>/<action>/$paramName" {
controller:<controller to take request>
action:<action to do task>
constraints {
paramName(nullable: false,empty:false, blank: false)
}
}
J'ai essayé d'utiliser l'annotation de printemps comme @PathVariable et @RequestParam dans le contrôleur comme indiqué ci-dessous: -
def action(@PathVariable("paramName") String param){
//code goes here
}
"comment ça ne marche pas trop" - qu'est-ce qui ne va pas? N'oubliez pas que les contraintes déterminent simplement si ce mappage d'URL particulier peut ou non s'appliquer à une demande donnée. Si vous avez d'autres mappages qui pourraient correspondre à la même URL (par exemple le mappage générique '" $ controller/$ action?/$ Id? "'), Il se peut que vos contraintes fonctionnent correctement, rejetant ce mappage particulier, mais le même contrôleur est appelé à travers un mappage différent à la place. –
Contraindre le paramètre avec 'nullable: false, vide: false, vide: false' ne fait vraiment rien. Puisque le mappage n'inclut pas de '?', Le paramètre doit être présent pour que ce mappage s'applique. Vous pouvez éliminer ces contraintes. –