2
votes

Définir la limite de taille pour le paramètre de demande

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é?


7 commentaires

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.


3 Réponses :


0
votes

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.


2 commentaires

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.



0
votes
  1. Changez le paramètre d'entrée (id) de cette méthode de service de repos de Long à String
    puis vérifiez la longueur de la chaîne et validez-vous ici
  2. Ensuite, convertissez cette valeur String en tant que ci-dessous:

    Long idValue = Long.valueOf (Id);

    ajoutez maintenant votre code existant ici


0 commentaires

1
votes

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: -

 entrez la description de l'image ici


2 commentaires

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