Table des matières
1. Introduction
2. Comment vérifier les paramètres avec élégance
2.1 Conseils officiels
2.2 Instructions d'utilisation des annotations
Maison Java javaDidacticiel Comment implémenter une vérification élégante des paramètres en Java

Comment implémenter une vérification élégante des paramètres en Java

May 19, 2023 pm 07:43 PM
java

1. Introduction

Pour vérifier les paramètres de la méthode, la manière la plus simple et la plus violente de l'écrire est comme ceci :

    public static void utilA(String a,BigDecimal b){
        if (StringUtils.isEmpty(a)){
            System.out.println("a不可为空");
            return;
        }
        if (b == null){
            System.out.println("b不可为空");
            return;
        }
        if (b.compareTo(BigDecimal.ZERO) != 1){
            System.out.println("b的取值范围不正确");
            return;
        }
        System.out.println("do something");
    }

Il n'y a aucun problème d'un point de vue fonctionnel.

Mais du point de vue de la maintenabilité à long terme du code, le taux de réutilisation du code est faible une fois qu'il y a trop de règles de vérification, il est difficile à maintenir, et cela semble maladroit pour les ingénieurs un peu persévérants, par exemple. une grande chose est quand même assez grande. Difficile à accepter.

Bien qu'il existe certaines solutions telles que Preconditions (com.google), il est difficile de s'adapter à tous les scénarios et n'est pas aussi confortable à utiliser qu'il devrait l'être.

2. Comment vérifier les paramètres avec élégance

Spring recommande officiellement une vérification élégante au niveau de la méthode avec une sémantique claire (vérification des paramètres d'entrée, vérification de la valeur de retour)

2.1 Conseils officiels

Officiel de Spring dans la documentation SpringBoot, la solution donnée pour la vérification des paramètres (Validation) est la suivante :

@Service
@Validated
public class MyBean {
 
    public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
            Author author) {
        ...
    }
 
}

Document du site officiel de Spring Boot "37. Validation"

C'est-à-dire utiliser la spécification JSR-303 et utiliser directement les annotations pour la vérification des paramètres.

(JSR-303 est une sous-spécification de JAVA EE 6, appelée Bean Validation, et l'implémentation de référence officielle est Hibernate Validator)

2.2 Instructions d'utilisation des annotations

2.2.1 Introduction aux annotations

Pour des raisons simples. tapez les paramètres (Non-Bean), utilisez des annotations pour ajouter des règles de contrainte directement avant les paramètres. Les annotations sont les suivantes :

@AssertTrue / @AssertFalse

Champs applicables de validation : booléen

Description de l'annotation : Vérifiez si la valeur est vraie / fausse

@DecimalMax / @DecimalMin

Champs applicables de validation : BigDecimal, BigInteger, String, byte, short, int, long

Annotation : Vérifiez si la valeur est inférieure ou égale à la valeur décimale spécifiée. Veuillez noter qu'il existe des problèmes de précision avec les décimales

@Digits

Vérification. champs applicables : BigDecimal, BigInteger, String,byte, short, int, long

Annotation : Vérifiez si la composition numérique de la valeur est légale

Description de l'attribut : entier : Spécifiez le nombre de chiffres dans la partie entière. fraction : spécifie le nombre de chiffres dans la partie fractionnaire.

@Future / @Past

Champs applicables de validation : Date, Calendrier

Description de l'annotation : Vérifiez si la valeur est après/avant l'heure actuelle

Description de la propriété : Public

@Max / @Min

Vérification Champs applicables : BigDecimal, BigInteger, String, byte, short, int, long

Annotation : Vérifiez si la valeur est inférieure ou égale à la valeur entière spécifiée

Description de l'attribut : Public

Remarque : Il est recommandé de utilisez les types Stirng et Integer. Il n'est pas recommandé d'utiliser le type int car la valeur soumise par le formulaire ne peut pas être convertie en int lorsqu'elle est ""

@NotNull / @Null

Champs applicables à la vérification : type de données de référence.

Remarque : Vérifiez si la valeur est non nulle / Vide

Description de l'attribut : Public

@NotBlank Vérifiez si la chaîne de contrainte est Null et si la longueur de la chaîne coupée est supérieure à 0, uniquement pour les chaînes, et les espaces de début et de fin seront supprimés.

@NotEmpty Vérifiez la contrainte si l'élément est Null ou EMPTY.

La différence entre @NotBlank et @NotEmpty : L'espace ("") est légal pour NotEmpty, mais NotBlank. lancera une exception de vérification

@Pattern

Champs applicables de validation : Chaîne

Annotation : Vérifiez si la valeur est équipée d'une expression régulière

Description de l'attribut : regexp : Indicateurs d'expression régulière : Un tableau spécifiant Pattern.Flag, représentant les options associées de l’expression régulière.

@Size

Champs applicables de vérification : String, Collection, Map, Array

Annotation : Vérifiez si la valeur répond à l'exigence de longueur

Description de l'attribut : max : spécifie la longueur maximale, min : spécifie la longueur minimale.

@Length(min=, max=) : Spécifiquement appliqué au type String

@Valid

Champs applicables de vérification : Vérifiez de manière récursive l'objet associé

Remarque : Si l'objet associé est une collection ou un tableau, puis effectuez une vérification récursive sur les éléments. S'il s'agit d'une carte, vérifiez la partie valeur (si vous souhaitez effectuer une vérification récursive)

Description de l'attribut : Aucune

@Range(min=, max=) L'élément spécifié doit être compris dans les limites. la plage appropriée

@CreditCardNumber Vérification de la carte de crédit

@Email Vérifiez s'il s'agit d'une adresse e-mail Si elle est nulle, aucune vérification n'est effectuée et la vérification est réussie.

@URL(protocol=,host=, port=,regexp=, flags=)

2.2.2 Utiliser

1 Introduire les dépendances

 <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.5.Final</version>
        </dependency>

2. La méthode est Lors de l'appel, si les paramètres réels transmis ne correspondent pas aux règles de contrainte, une ConstraintViolationException sera levée directement, indiquant que la vérification des paramètres a échoué.

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
 
/**
 * @Author: wangxia
 * @Date: 2021/10/20 16:30
 */
public class TestPerson {
 
    @NotEmpty(message = "用户名不能为空")
    private String username;
 
    @Min(value = 0,message = "年龄不能小于0岁")
    @Max(value =150,message = "年龄不能大于150岁")
    private int age;
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

3.. Pour les paramètres de type Bean, ajoutez des annotations de contrainte à chaque champ à l'intérieur du Bean, puis ajoutez des annotations @Validated ou @Valid devant les paramètres de la méthode. Exemple :

@RequestMapping("/")
@RestController
public class TestValidatController {
 
    @PostMapping("/testValid")
    public String testValid(@Validated @RequestBody TestPerson testPerson){
        return "测试成功";
    }
 
}

4. Interceptez les exceptions avec élégance. Cette étape peut être omise, mais elle sera renvoyée directement lors de la demande, avec une invite d'exception 400, ce qui n'est pas très élégant.

@ControllerAdvice
@ResponseBody 
public class MethodArgumentNotValidHandel {
 
 
    @ExceptionHandler(value=MethodArgumentNotValidException.class)
    public JSONObject MethodArgumentNotValidHandler(HttpServletRequest request,
                                                    MethodArgumentNotValidException exception) throws Exception
    {
        JSONObject result=new JSONObject();
        result.put("code","fail");
        JSONObject errorMsg=new JSONObject();
        for (FieldError error : exception.getBindingResult().getFieldErrors()) {
            errorMsg.put(error.getField(),error.getDefaultMessage());
        }
        result.put("msg",errorMsg);
        return result;
    }
 
}

Ajouter une invite d'exception élégamment capturée :

Comment implémenter une vérification élégante des paramètres en Java

Ne pas ajouter d'invite d'exception élégamment capturée :

Comment implémenter une vérification élégante des paramètres en Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1538
276
Excel trouver et remplacer ne fonctionne pas Excel trouver et remplacer ne fonctionne pas Aug 13, 2025 pm 04:49 PM

CheckkSearchSettings like "MatchEnteRireCellContents" et "MatchCase" ByExpandingOptionsInFindanDreplace, garantissant "lookin" issettominuesand »dans" TOCORRECTSCOPE; 2.LOORHFORHIDDENCHARACTER

Comment déployer une application Java Comment déployer une application Java Aug 17, 2025 am 12:56 AM

Préparez-vous en application par rapport à Mavenorgradletobuildajarorwarfile, externalisationConfiguration.2.ChoOSEADPLOYENDIRONMENT: Runonbaremetal / vmwithjava-jarandsystemd, deploywarontomcat, compeneriserisewithdocker, orusecloudplatformslikelise.

Comment configurer la journalisation dans une application Java? Comment configurer la journalisation dans une application Java? Aug 15, 2025 am 11:50 AM

L'utilisation de SLF4J combinée avec la journalisation ou le log4j2 est le moyen recommandé de configurer les journaux dans les applications Java. Il introduit des bibliothèques API et implémentation en ajoutant des dépendances Maven correspondantes; 2. Obtenez l'enregistreur via le loggerfactory de SLF4J dans le code et écrivez le code journal découplé et efficace à l'aide de méthodes de journalisation paramétrée; 3. Définir le format de sortie du journal, le niveau, la cible (console, le fichier) et le contrôle du journal du package via Logback.xml ou les fichiers de configuration log4j2.xml; 4. Activer éventuellement la fonction de balayage de fichiers de configuration pour atteindre un ajustement dynamique du niveau de journal, et Springboot peut également être géré via des points de terminaison de l'actionneur; 5. Suivez les meilleures pratiques, y compris

Liaison des données XML avec Castor en Java Liaison des données XML avec Castor en Java Aug 15, 2025 am 03:43 AM

CASTORENablesxml-to-javaObjectMappingViadefaultConverionsOrexplicitMappingFiles; 1) DefinejavaclasseswithGetters / seters; 2) useUnmarShallertOConvertXmltoObjects; 3)

JS Ajouter un élément au début du tableau JS Ajouter un élément au début du tableau Aug 14, 2025 am 11:51 AM

Dans JavaScript, la méthode la plus courante pour ajouter des éléments au début d'un tableau est d'utiliser la méthode Unsich (); 1. En utilisant unsith () modifiera directement le tableau d'origine, vous pouvez ajouter un ou plusieurs éléments pour retourner la nouvelle longueur du tableau ajouté; 2. Si vous ne souhaitez pas modifier le tableau d'origine, il est recommandé d'utiliser l'opérateur d'extension (tel que [Newelement, ... Arr]) pour créer un nouveau tableau; 3. Vous pouvez également utiliser la méthode CONCAT () pour combiner le nouveau tableau d'éléments avec le numéro d'origine, renvoyez le nouveau tableau sans modifier le tableau d'origine; En résumé, utilisez Unsich () lors de la modification du tableau d'origine et recommandez l'opérateur d'extension lorsque vous gardez le tableau d'origine inchangé.

Comparaison des performances: Java Vs. GO pour les services backend Comparaison des performances: Java Vs. GO pour les services backend Aug 14, 2025 pm 03:32 PM

GOTYPICAL OFFERSBETTERRUNTIMEPERFORMANCE AVEC LA MAINTRÉE DE PUTHROUGHTANDLOWERLATENCE, ENTERTFORI / O-HEAVYSERVICES, DUETOITSLIGHT LONDEGOROUTINESANDERFICENTSCHEDULL

Comment travailler avec JSON à Java Comment travailler avec JSON à Java Aug 14, 2025 pm 03:40 PM

ToworkwithJSONinJava,useathird-partylibrarylikeJackson,Gson,orJSON-B,asJavalacksbuilt-insupport;2.Fordeserialization,mapJSONtoJavaobjectsusingObjectMapperinJacksonorGson.fromJson;3.Forserialization,convertJavaobjectstoJSONstringsviawriteValueAsString

Quel est le mot-clé Assert en Java? Quel est le mot-clé Assert en Java? Aug 17, 2025 am 12:52 AM

TheassertKeywordInjavaisUsedTovalIdateShandshandingsDuringDevelopment, ThrowinganAssertionErroriftheconditionisfalse.2.ithastwoforms: AssertCondition; AndSersertCondition: Message; avecthelatterProvidActureCustomerMessage.3.

See all articles