2017-10-13 6 views
0

Supposons que j'ai un RestController pour un @GetMapping comme ci-dessousValidation printemps pour plusieurs @RequestParam

ResponseEntity<?> getXXX(
@RequestParam(value = "param1", required = true) String param1, 
@RequestParam(value = "param2", required = true) String param1) 

si le consommateur effectue @Get pour cette API sans param1 et param2, printemps va jeter le « MissingServletRequestParameterException » mais seulement pour le param1 mais param2

Ma question est ici si le consommateur ne passe pas à la fois param1 et param2, pourrions-nous obtenir en quelque sorte MissingServletRequestParameterException pour à la fois param1 et param2?

S'il vous plaît me conseiller

+0

Je pense que seule la valeur est à faire en faisant à la fois requestparma required = false et ensuite vérifier les valeurs dans votre méthode seulement, puis lancer l'exception appropriée. –

+0

Utilisez soit une carte 'ou créez un validateur personnalisé pour vos paramètres de requête. – imk

+0

Merci. Permettez-moi de recherche sur la carte

Répondre

0

Tout d'abord, ce code ne compile pas, puisque vous avez redéclarée une variable dans un champ. De plus, si j'ai bien compris la question, si vous refactorisez l'extrait de code donné (print), spring lèvera une exception si le premier paramètre requis manque, tout comme jvm jette NullPointerException dans une situation analogue avec des informations sur l'exception seulement en ligne à l'exception:

String a = null; 
String b = null; 
a.length();  //NullPointerException exception thrown 
b.length(); 

Vous devez créer votre validateur personnalisé vérifier si les paramètres ont été donnés dans la demande et si, de jeter une exception appropriée. Quelque chose comme:

void validate(String param1, String param2) { 
     Stream.of(param1, param2).filter(Objects::nonNull).findAny().orElseThrow(() -> new IllegalArgumentException("param1 and param2 are missing")); 
     Optional.ofNullable(param1).orElseThrow(() -> new IllegalArgumentException("param1 is missing")); 
     Optional.ofNullable(param2).orElseThrow(() -> new IllegalArgumentException("param2 is missing")); 
    } 

avec une exception que vous souhaitez lancer. Si vous voulez le faire de cette façon, définissez les valeurs des indicateurs "required" sur false.

+0

1. Il vaut mieux ne pas utiliser d'abréviations lorsque vous répondez à la question, il y a une possibilité que quelqu'un ne la décode pas. 2. Je suggère d'utiliser la classe 'Optional' pour les vérifications' null'. Java 8 avènement était il y a un certain temps. – DevDio

+0

Merci. Le code n'est pas du code réel, je le tape juste pour la question. –