Actuellement, j'ai une API comme celle-ci:
Failed to convert value of type 'java.lang.String' to required type 'long';
nested exception is java.lang.NumberFormatException: For input string:
"1111111111111111111111111111111111111111111"
Le problème est lorsque je consomme l'API comme ceci:
{baseUrl}/user/1111111111111111111111111111111111111111111
Je reçois un message d'erreur comme celui-ci:
@GetMapping(/user/{id})
public ResponseEntity<MyClass> getById(@PathVariable @Max(value = Long.MAX_VALUE, message= ID_LENGTH_EXCEED_MESSAGE) Long id) {
//some code here
return new ResponseEntity<>(HttpStatus.OK);
}
Avez-vous une idée comment limiter la longueur de la valeur dans la variable de chemin ou même dans le paramètre de requête et obtenir un message restreint personnalisé?
3 Réponses :
Voici comment jeter des erreurs personnalisées. Je suggérerais d'accepter une String comme valeur pour l'identifiant de l'utilisateur. Lorsque l'analyse de la valeur échoue, vous pouvez lancer votre erreur personnalisée.
Cela semble utile. Mais y a-t-il un moyen de restreindre la taille ou la valeur maximale dans le contrôleur lui-même.
Désolé, mais je ne connais pas d'autre moyen de faire cela.
Long à String
Ensuite, convertissez cette valeur String en tant que ci-dessous:
Long idValue = Long.valueOf (Id);
ajoutez maintenant votre code existant ici
Il semble que java ne puisse pas gérer un nombre trop grand comme int ou long donc gérer comme string et utiliser la propriété length de string pour gérer et analyser en int ou long.
Remarque: si la longueur de la chaîne est trop longue que l'entier ou que la longueur peut prendre en charge, utilisez la fonction de retour ou toute fonction de rappel.
Plage de variables Java: -
Cela signifie-t-il que la valeur que nous envoyons comme id doit être comprise entre -9223372,036,854,775,808 et 9,223,372,036,854,775,807 afin que nous puissions appliquer le @Max
@SudipBolakhe oui certainement c'est la limite de la variable, vérifiez-la pour l'entier que je vais travailler. comme tu t'y attendais
pensez simplement, si vous pouvez écrire comme
long l = 11111111111111111111111111111111111111111L;en Java, si vous le pouvez, vous pouvez faire ci-dessus aussi, car avant de lancer une exception personnalisée, la bibliothèque lançait déjà une exception tout en ajustant une valeur longue,Veuillez utiliser la variable Long pour gérer ce problème.integer ne peut pas prendre en charge un grand nombre de données
@dkb Oui, je comprends cela, mais ce à quoi je m'attends, c'est de restreindre la taille ou la valeur maximale du contrôleur lui-même.
@BathriNathan J'ai utilisé le Long là-bas
@SudipBolakhe s'il vous plaît vérifier ma réponse, cela vous sera utile ...
Reportez-vous à: github.com/spring-projects/spring-framework/issues/11041 < / a>, cette fonctionnalité est en file d'attente pour être implémentée mais il existe une solution de contournement, le problème persistera car Long id doit d'abord contenir la valeur avant que la validation ne fonctionne, donc soit vous changez en String et effectuez la validation, soit vous avez un gestionnaire d'exceptions personnalisé .
@dkb Oui, moi aussi, je comprends que, si nous devons appliquer des contraintes de taille ou une valeur maximale, la valeur doit d'abord être dans la plage du type de données.