Comment implémenter une vérification élégante des paramètres en 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 :
Ne pas ajouter d'invite d'exception élégamment capturée :
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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

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

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

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

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

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