亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javax.validation.constraints如何校驗(yàn)參數(shù)合法性

 更新時(shí)間:2024年07月04日 08:40:11   作者:xindoo  
本文將深入探討javax.validation.constraints的基本用法和高級(jí)應(yīng)用,幫助讀者更好地理解和運(yùn)用這個(gè)強(qiáng)大的校驗(yàn)框架,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

javax.validation.constraints校驗(yàn)參數(shù)合法性

在Java開(kāi)發(fā)過(guò)程中,數(shù)據(jù)校驗(yàn)是一項(xiàng)至關(guān)重要的任務(wù)。

為了確保數(shù)據(jù)的完整性和正確性,我們通常需要對(duì)輸入的數(shù)據(jù)進(jìn)行一系列的校驗(yàn)。

javax.validation.constraints提供了一套基于注解的校驗(yàn)框架,能夠讓我們簡(jiǎn)潔、高效地完成數(shù)據(jù)校驗(yàn)工作。

基本用法:常用注解

javax.validation.constraints包含了一組基礎(chǔ)的校驗(yàn)注解,覆蓋了大多數(shù)常見(jiàn)的數(shù)據(jù)校驗(yàn)場(chǎng)景。

下面我們逐一介紹這些基本注解:

  • @NotNull: 用于檢查值是否為null。
  • @NotEmpty: 用于檢查字符串、集合、數(shù)組等類型是否為空或null。
  • @Size: 用于檢查字符串、集合、數(shù)組等類型的元素個(gè)數(shù)是否在指定的范圍內(nèi)。
  • @Min: 用于檢查數(shù)值是否大于等于指定的最小值。
  • @Max: 用于檢查數(shù)值是否小于等于指定的最大值。
  • @DecimalMin: 用于檢查數(shù)值是否大于等于指定的最小值(可以是浮點(diǎn)數(shù))。
  • @DecimalMax: 用于檢查數(shù)值是否小于等于指定的最大值(可以是浮點(diǎn)數(shù))。
  • @Digits: 用于檢查數(shù)值是否符合指定的整數(shù)位數(shù)和小數(shù)位數(shù)要求。
  • @Email: 用于檢查字符串是否符合電子郵件格式。
  • @Pattern: 用于檢查字符串是否符合指定的正則表達(dá)式。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用這些基本注解對(duì)一個(gè)用戶實(shí)體類進(jìn)行校驗(yàn):

import javax.validation.constraints.*;

public class User {

    @NotNull(message = "ID 不能為空")
    private Long id;

    @NotEmpty(message = "用戶名不能為空")
    @Size(min = 2, max = 20, message = "用戶名長(zhǎng)度必須在 2 到 20 個(gè)字符之間")
    private String username;

    @Min(value = 18, message = "年齡必須大于等于 18 歲")
    @Max(value = 100, message = "年齡必須小于等于 100 歲")
    private int age;

    @Email(message = "電子郵件格式不正確")
    private String email;

    // Getter and Setter ...
}

高級(jí)應(yīng)用:自定義注解和校驗(yàn)器

盡管javax.validation.constraints提供了豐富的基礎(chǔ)注解,但有時(shí)我們還需要進(jìn)行一些特定的校驗(yàn)操作。這時(shí),我們可以通過(guò)自定義注解和校驗(yàn)器來(lái)實(shí)現(xiàn)這些需求。

以下是一個(gè)示例,展示了如何創(chuàng)建一個(gè)自定義注解@Password,用于檢查密碼是否符合強(qiáng)度要求(至少包含一個(gè)大寫字母、一個(gè)小寫字母和一個(gè)數(shù)字):

首先,創(chuàng)建自定義注解@Password

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = PasswordValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Password {

    String message() default "密碼必須包含至少一個(gè)大寫字母、一個(gè)小寫字母和一個(gè)數(shù)字";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

然后,創(chuàng)建自定義校驗(yàn)器PasswordValidator

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class PasswordValidator implements ConstraintValidator<Password, String> {

    private static final String PASSWORD_PATTERN = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$";

    @Override
    public void initialize(Password constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return false;
        }
        return value.matches(PASSWORD_PATTERN);
    }
}

最后,在需要校驗(yàn)的字段上添加自定義注解@Password

public class User {

    // ... 其他字段

    @Password
    private String password;

    // Getter and Setter ...
}

整合Spring Boot

在Spring Boot項(xiàng)目中,我們可以很方便地整合javax.validation.constraints進(jìn)行數(shù)據(jù)校驗(yàn)。

首先,需要在項(xiàng)目的pom.xml文件中添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

然后,在Controller方法的參數(shù)前添加@Valid注解,即可觸發(fā)數(shù)據(jù)校驗(yàn)。

當(dāng)校驗(yàn)失敗時(shí),Spring Boot會(huì)拋出MethodArgumentNotValidException異常。

我們可以通過(guò)定義全局異常處理器來(lái)捕獲該異常,并將校驗(yàn)失敗的信息返回給客戶端:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException exception) {
        StringBuilder message = new StringBuilder();
        exception.getBindingResult().getFieldErrors().forEach(fieldError ->
                message.append(fieldError.getField()).append(": ").append(fieldError.getDefaultMessage()).append("; ")
        );
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(message.toString());
    }
}

總結(jié)

以上就是javax.validation.constraints的基本用法和高級(jí)應(yīng)用。

通過(guò)掌握這個(gè)強(qiáng)大的校驗(yàn)框架,我們可以輕松地為Java項(xiàng)目實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)功能,從而提高代碼的健壯性和可維護(hù)性。

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java如何實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳功能

    Java如何實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳功能

    其實(shí)斷點(diǎn)續(xù)傳的原理很簡(jiǎn)單,就是在Http的請(qǐng)求上和一般的下載有所不同而已,本文將詳細(xì)介紹Java如何實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳功能,需要的朋友可以參考下
    2012-11-11
  • shrio中hashedCredentialsMatcher密碼匹配示例詳解

    shrio中hashedCredentialsMatcher密碼匹配示例詳解

    shrio是一個(gè)輕量級(jí)權(quán)限管理框架,密碼的匹配由框架內(nèi)部完成。密碼是否匹配由接口CredentialsMatcher定義實(shí)現(xiàn)類完成,CredentialsMatcher實(shí)現(xiàn)類有SimpleCredentialsMatcher和HashedCredentialsMatcher兩個(gè)
    2021-10-10
  • Java基礎(chǔ)之練習(xí)打印三角形

    Java基礎(chǔ)之練習(xí)打印三角形

    這篇文章主要介紹了Java基礎(chǔ)之練習(xí)打印三角形,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn)

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn),雙向鏈表是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它允許在鏈表中的任意位置進(jìn)行高效的插入和刪除操作,需要的朋友可以參考下
    2022-05-05
  • Java數(shù)據(jù)類型的規(guī)則

    Java數(shù)據(jù)類型的規(guī)則

    這篇文章主要介紹了Java數(shù)據(jù)類型的規(guī)則的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Java實(shí)現(xiàn)經(jīng)典拳皇誤闖冒險(xiǎn)島游戲的示例代碼

    Java實(shí)現(xiàn)經(jīng)典拳皇誤闖冒險(xiǎn)島游戲的示例代碼

    《拳皇誤闖冒險(xiǎn)島》是拳皇和冒險(xiǎn)島素材的基于JavaSwing的動(dòng)作類游戲。本文將用Java語(yǔ)言實(shí)現(xiàn)這一游戲,需要的小伙伴可以參考一下
    2022-02-02
  • SpringBoot中定義Bean的方法總結(jié)

    SpringBoot中定義Bean的方法總結(jié)

    在Spring Boot應(yīng)用程序中,定義Bean是非常常見(jiàn)的操作,它是構(gòu)建應(yīng)用程序的基礎(chǔ),pring Boot提供了多種方式來(lái)定義Bean,每種方式都有其適用的場(chǎng)景和優(yōu)勢(shì),本文將介紹Spring Boot中定義Bean的幾種常見(jiàn)方式,需要的朋友可以參考下
    2023-12-12
  • Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    下面小編就為大家?guī)?lái)一篇Java創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • java 代碼中預(yù)防空指針異常的處理辦法

    java 代碼中預(yù)防空指針異常的處理辦法

    個(gè)人在做項(xiàng)目時(shí),對(duì)NullPointerException的幾點(diǎn)總結(jié),請(qǐng)網(wǎng)友拍磚!??!多多提意見(jiàn),
    2013-03-03
  • Java方法反射實(shí)現(xiàn)原理詳解

    Java方法反射實(shí)現(xiàn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了Java方法反射的實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評(píng)論