Dans mon contrôleur, j'ai un paramètre String, contenant un identifiant, qui ne doit pas être nul pour une chaîne vide. Je me demande, est-il possible de vérifier qu'il ne s'agit pas d'une chaîne vide dans les paramètres @RequestMapping? J'ai essayé de le résoudre d'une manière ou d'une autre
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id=\"\""})
public SomeResponse doSomething(@RequestParam(required = true) String id)
sans succès. Si je comprends bien, params = {"id"}
Et @RequestParam(required = true)
ne peuvent que vérifier que le paramètre id
est présenté dans la demande (! = Null).
Il est très probable que je doive vérifier qu'avec du code dans le contrôleur boby, comme
if (id == null || id.isEmpty()) {
return someErrorResponse;
}
mais veuillez me corriger si je me trompe. Merci d'avance.
P.S. mon application fonctionne sur Java 1.7 SE dans le conteneur Apache Tomcat 7.0.62
Selon le code Spring qui utilise cette annotation
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
Quelque chose comme ça devrait fonctionner:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
Si vous voulez être Java EE compatible avec les validations, utilisez @Size(min=1)
.
Hibernate Validator a @NotEmpty
annotation à cet effet. Mais cela ne fait pas partie de Java spec.
BTW, gardez required=true
comme ci-dessus, les notifications n'imposeraient pas la présence du paramètre dans la demande.
Réaction EDIT sur le commentaire:
Spring est Java EE Validation conforme, donc l'annotation @Size devrait fonctionner si vous avez un implémenteur API de validation Java Java EE sur le chemin de classe. J'ai utilisé uniquement un validateur d'hibernation donc Vous pouvez donc activer ces fonctionnalités de validation en les ajoutant dans classpath:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.1.Final</version>
</dependency>
que vous pouvez annoter votre contrôleur avec @Validated
annotation et faites ceci:
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) @Size(min=1) String id)
Vous pouvez également personnaliser le message d'erreur qui sera envoyé au client.
Si vous n'êtes pas familier avec la validation Java EE, je vous suggère de commencer à l'examiner car c'est très important si vous créez un point de terminaison REST/HTTP. Cela vous ouvrira un nouveau monde.