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

Spring?中使用?Validation?注解校驗參數(shù)的方法

 更新時間:2024年11月27日 11:56:55   作者:進階的菜狗  
本文介紹了如何在Spring中使用Validation注解進行參數(shù)校驗,包括引入依賴、簡單示例、常見校驗注解分類與說明、分組校驗和自定義校驗,通過這些方法,可以方便地對Controller、Service等層面的參數(shù)進行校驗,確保數(shù)據(jù)的合法性和一致性,感興趣的朋友跟隨小編一起看看吧

Spring 中使用 Validation 注解校驗參數(shù)

在日常開發(fā)中,參數(shù)校驗是一個常見需求,而 Java 的 Bean Validation 提供了一種優(yōu)雅的方式,通過注解對對象的字段進行校驗。Spring 對此功能進行了深度整合,使得在 Controller、Service 等層面實現(xiàn)校驗變得非常簡單。

本文將從以下幾個方面介紹如何在 Spring 中使用 Validation 注解:

  • 引入依賴
  • 簡單示例
  • 常見校驗注解分類與說明
  • 分組校驗
  • 自定義校驗

1. 引入依賴

在使用 Spring 校驗功能之前,需要引入相關(guān)依賴。
通常使用 Hibernate Validator 作為 JSR 380 的實現(xiàn)。

Maven

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

Gradle

implementation 'org.springframework.boot:spring-boot-starter-validation'

2. 簡單示例

以下是一個基本的參數(shù)校驗示例。我們通過 @NotNull, @Size 等注解對參數(shù)進行校驗,并在校驗失敗時返回錯誤信息。

數(shù)據(jù)模型

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
    @NotNull(message = "用戶名不能為空")
    @Size(min = 3, max = 15, message = "用戶名長度必須在3到15個字符之間")
    private String username;
    @NotNull(message = "密碼不能為空")
    @Size(min = 6, message = "密碼長度至少為6個字符")
    private String password;
    // Getter & Setter
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

Controller

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    @PostMapping("/register")
    public String register(@RequestBody @Valid User user) {
        return "用戶注冊成功:" + user.getUsername();
    }
}

測試

請求示例:

請求 Body

{
    "username": "john",
    "password": "123456"
}

響應(yīng)成功

用戶注冊成功:john

錯誤請求 Body

{
    "username": "jo",
    "password": ""
}

響應(yīng)失敗

{
    "timestamp": "2024-11-18T12:34:56.789",
    "status": 400,
    "error": "Bad Request",
    "message": "用戶名長度必須在3到15個字符之間; 密碼不能為空"
}

3. 常見校驗注解分類與說明

通用校驗

注解功能說明示例
@NotNull字段不能為空@NotNull(message="必填")
@NotBlank字符串非空且非空白@NotBlank(message="必填")
@NotEmpty集合或數(shù)組不能為空@NotEmpty
@Size字符串、集合長度校驗@Size(min=1, max=10)

數(shù)值校驗

注解功能說明示例
@Min值必須大于等于指定值@Min(18)
@Max值必須小于等于指定值@Max(100)
@Positive值必須為正數(shù)@Positive
@PositiveOrZero值必須為正數(shù)或零@PositiveOrZero
@Negative值必須為負(fù)數(shù)@Negative

字符串校驗

注解功能說明示例
@Email必須是合法郵箱地址@Email(message="郵箱格式錯誤")
@Pattern必須匹配正則表達式@Pattern(regexp="\\d{3}-\\d{3}")

日期校驗

注解功能說明示例
@Past必須是過去的日期@Past
@Future必須是將來的日期@Future
@PastOrPresent必須是過去或當(dāng)前日期@PastOrPresent
@FutureOrPresent必須是將來或當(dāng)前日期@FutureOrPresent

Validation關(guān)于直接對JSON的日期格式進行校驗,需要使用正則表達式 @Pattern(regexp = “”)或者自定義注解,建議直接使用Jackson的@JsonFormat。

4. 分組校驗

在實際項目中,不同場景可能需要不同的校驗規(guī)則,例如新增和更新時字段要求可能不同??梢酝ㄟ^ 分組校驗 實現(xiàn)。

分組接口

public class Group{
public interface CreateGroup {}
public interface UpdateGroup {}
}

數(shù)據(jù)模型

import javax.validation.constraints.*;
public class User {
    @NotNull(message = "用戶ID不能為空", groups = Group.UpdateGroup.class)
    private Long id;
    @NotBlank(message = "用戶名不能為空", groups = Group.CreateGroup.class)
    private String username;
    @NotBlank(message = "密碼不能為空", groups = GroupCreateGroup.class)
    private String password;
    // Getter & Setter
}

Controller

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    @PostMapping("/create")
    public String create(@RequestBody @Validated(CreateGroup.class) User user) {
        return "創(chuàng)建成功:" + user.getUsername();
    }
    @PostMapping("/update")
    public String update(@RequestBody @Validated(UpdateGroup.class) User user) {
        return "更新成功:" + user.getId();
    }
}

5. 自定義校驗

當(dāng)現(xiàn)有的注解無法滿足需求時,可以自定義校驗注解。

自定義注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = UsernameValidator.class) // 關(guān)聯(lián)校驗器
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidUsername {
    String message() default "用戶名非法";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

自定義校驗器

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class UsernameValidator implements ConstraintValidator<ValidUsername, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value != null && value.matches("^[a-zA-Z0-9]+$");
    }
}

使用自定義注解

public class User {
    @ValidUsername
    private String username;
    // Getter & Setter
}

到此這篇關(guān)于Spring 中使用 Validation 注解校驗參數(shù)的文章就介紹到這了,更多相關(guān)Spring Validation 校驗參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java單例五種實現(xiàn)模式解析

    java單例五種實現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java concurrency線程池之Callable和Future_動力節(jié)點Java學(xué)院整理

    Java concurrency線程池之Callable和Future_動力節(jié)點Java學(xué)院整理

    這篇文章主要為大家詳細介紹了Java concurrency線程池之Callable和Future,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • linux中nohup?java?-jar啟動java項目的步驟

    linux中nohup?java?-jar啟動java項目的步驟

    nohup是一個Unix和Linux命令,用于運行關(guān)閉時不會被終止的進程,這篇文章主要給大家介紹了關(guān)于linux中nohup?java?-jar啟動java項目的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Springboot遷移到Micronaut實現(xiàn)過程詳解

    Springboot遷移到Micronaut實現(xiàn)過程詳解

    這篇文章主要為大家?介紹了Springboot遷移到Micronaut實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • SpringBoot中使用@Scheduled注解創(chuàng)建定時任務(wù)的實現(xiàn)

    SpringBoot中使用@Scheduled注解創(chuàng)建定時任務(wù)的實現(xiàn)

    這篇文章主要介紹了SpringBoot中使用@Scheduled注解創(chuàng)建定時任務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java簡單使用redis-zset實現(xiàn)排行榜

    Java簡單使用redis-zset實現(xiàn)排行榜

    這篇文章主要介紹了Java簡單使用redis-zset實現(xiàn)排行榜,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java有趣好玩的圖形界面開發(fā)八個案例實現(xiàn)

    Java有趣好玩的圖形界面開發(fā)八個案例實現(xiàn)

    今天使用GUI技術(shù)寫了幾個練習(xí)的Demo,希望對大家學(xué)習(xí)圖形用戶界面有所幫助,感興趣的同學(xué)來看看吧,動手敲一遍理解更通透
    2022-05-05
  • Retrofit+RxJava實現(xiàn)帶進度條的文件下載

    Retrofit+RxJava實現(xiàn)帶進度條的文件下載

    這篇文章主要為大家詳細介紹了Retrofit+RxJava實現(xiàn)帶進度條的文件下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • SpringCloud通過Feign傳遞List類型參數(shù)方式

    SpringCloud通過Feign傳遞List類型參數(shù)方式

    這篇文章主要介紹了SpringCloud通過Feign傳遞List類型參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • IDEA中Translation使用及問題解決

    IDEA中Translation使用及問題解決

    本文主要介紹了IDEA中Translation使用及問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評論