web-dev-qa-db-fra.com

Comment vérifier que le paramètre de demande n'est pas une chaîne vide dans les paramètres @RequestMapping?

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

13
WeGa

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)
9
Sergio

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.

Commencez avec Java EE Tutorial for validation

Partie pertinente du Spring doc

9
luboskrnac