欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

基本用法:常用注解

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

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

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

以下是一個簡單的示例,展示了如何使用這些基本注解對一個用戶實體類進行校驗:

import javax.validation.constraints.*;

public class User {

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

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

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

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

    // Getter and Setter ...
}

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

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

以下是一個示例,展示了如何創(chuàng)建一個自定義注解@Password,用于檢查密碼是否符合強度要求(至少包含一個大寫字母、一個小寫字母和一個數(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 "密碼必須包含至少一個大寫字母、一個小寫字母和一個數(shù)字";

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

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

然后,創(chuàng)建自定義校驗器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);
    }
}

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

public class User {

    // ... 其他字段

    @Password
    private String password;

    // Getter and Setter ...
}

整合Spring Boot

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

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

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

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

當校驗失敗時,Spring Boot會拋出MethodArgumentNotValidException異常。

我們可以通過定義全局異常處理器來捕獲該異常,并將校驗失敗的信息返回給客戶端:

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的基本用法和高級應(yīng)用。

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

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

相關(guān)文章

  • 深入理解Java設(shè)計模式之策略模式

    深入理解Java設(shè)計模式之策略模式

    這篇文章主要介紹了JAVA設(shè)計模式之策略模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2021-11-11
  • java實現(xiàn)象棋小游戲

    java實現(xiàn)象棋小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)象棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • HttpServletRequest的getParameter()的坑及解決

    HttpServletRequest的getParameter()的坑及解決

    這篇文章主要介紹了HttpServletRequest的getParameter()的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 基于SpringBoot的Docker部署詳解

    基于SpringBoot的Docker部署詳解

    這篇文章主要為大家介紹了基于SpringBoot的Docker部署過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Mybatis自定義攔截器和插件開發(fā)詳解

    Mybatis自定義攔截器和插件開發(fā)詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis自定義攔截器和插件開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • java 實現(xiàn)取int型的第二個字節(jié)的數(shù)

    java 實現(xiàn)取int型的第二個字節(jié)的數(shù)

    這篇文章主要介紹了java 實現(xiàn)取int型的第二個字節(jié)的數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java解決LocalDateTime傳輸前端為時間的數(shù)組

    Java解決LocalDateTime傳輸前端為時間的數(shù)組

    本文主要介紹了Java解決LocalDateTime傳輸前端為時間的數(shù)組,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • SpringBoot Druid配置過程圖解

    SpringBoot Druid配置過程圖解

    這篇文章主要介紹了SpringBoot Druid配置過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java stream中Collectors的用法實例精講

    java stream中Collectors的用法實例精講

    這篇文章主要為大家介紹了java stream中Collectors的用法實例精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java學習之猜數(shù)字小游戲

    java學習之猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了java學習之猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論