最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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值必須為負數(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基礎(chǔ)之Web服務(wù)器與Http詳解

    Java基礎(chǔ)之Web服務(wù)器與Http詳解

    無論你是前端開發(fā)者還是后端開發(fā)者,以及測試工程師,這篇文章的知識都是你需要弄懂的。讀完這一篇文章,將全面弄懂 HTTP 協(xié)議、TCP 協(xié)議,面試官再也難不倒你相關(guān)知識
    2021-09-09
  • Mybatis源碼解析之初始化分析

    Mybatis源碼解析之初始化分析

    這篇文章主要介紹了Mybatis源碼解析之初始化分析,Mybatis的初始化過程就是mybatis配置文件的解析過程并將解析結(jié)果保存到Configuration類。,需要的朋友可以參考下
    2024-01-01
  • springboot 獲取訪問接口的請求的IP地址的實現(xiàn)

    springboot 獲取訪問接口的請求的IP地址的實現(xiàn)

    本文主要介紹了springboot獲取訪問接口的請求的IP地址的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot注冊web組件的實現(xiàn)方式

    SpringBoot注冊web組件的實現(xiàn)方式

    Servlet是Java Web應(yīng)用程序的基礎(chǔ),它提供了處理客戶端請求的機制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應(yīng)用程序的核心組件,本文將給大家介紹一下SpringBoot注冊web組件的實現(xiàn)方式,需要的朋友可以參考下
    2023-10-10
  • Spring Boot 對接深度求索接口實現(xiàn)知識問答功能

    Spring Boot 對接深度求索接口實現(xiàn)知識問答功能

    本文詳細介紹了如何使用 Spring Boot 對接深度求索接口,實現(xiàn)知識問答功能,通過整合深度求索 API,我們可以輕松地在 Spring Boot 項目中實現(xiàn)智能問答功能,
    2025-02-02
  • SpringMVC JSON數(shù)據(jù)傳輸參數(shù)超詳細講解

    SpringMVC JSON數(shù)據(jù)傳輸參數(shù)超詳細講解

    有時候參數(shù)的傳遞還需要更多的參數(shù),比如一個獲取用戶信息的請求中既有用戶ID等基本參數(shù),還要求對查詢結(jié)果進行分頁,針對這種場景,一般都會將分頁參數(shù)封裝成一個對象,然后將它和基本參數(shù)一起傳給控制器
    2023-02-02
  • SpringBoot打印啟動時異常堆棧信息詳解

    SpringBoot打印啟動時異常堆棧信息詳解

    在本篇文章里小編給大家整理的是關(guān)于SpringBoot打印啟動時異常堆棧信息,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • Java開發(fā)可離不開的@Mapper注解舉例詳解

    Java開發(fā)可離不開的@Mapper注解舉例詳解

    @Mapper 是 Mybatis 的注解,和Spring沒有關(guān)系,這篇文章主要介紹了Java中@Mapper注解的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-05-05
  • Java格式化類Format解讀

    Java格式化類Format解讀

    Java.text.Format 是 Java 格式化的抽象基類,用于將對象格式化為指定模式的字符串,或者將指定模式的字符串解析為對象,主要包含 format 和 parseObject 方法,分別用于格式化和解析
    2024-12-12
  • 使用Java實現(xiàn)在PDF插入頁眉頁腳

    使用Java實現(xiàn)在PDF插入頁眉頁腳

    在處理PDF文檔時,有時需要為文檔中的每一頁添加頁眉和頁腳,這篇文章主要為大家詳細介紹了如何使用Java為PDF文件添加頁眉、頁腳,感興趣的可以了解下
    2024-03-03

最新評論

宾阳县| 神农架林区| 武威市| 体育| 平远县| 崇阳县| 吉林市| 陇川县| 江西省| 名山县| 朝阳区| 扶沟县| 建湖县| 得荣县| 富川| 拉萨市| 五原县| 平果县| 白朗县| 龙泉市| 无棣县| 巴林左旗| 射阳县| 罗源县| 繁昌县| 灌云县| 平和县| 柘荣县| 海城市| 迭部县| 米易县| 濮阳县| 大足县| 宜春市| 温宿县| 吴桥县| 巴南区| 上林县| 连山| 乌鲁木齐市| 抚州市|