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

springboot之Validation參數(shù)校驗詳細解讀

 更新時間:2023年10月08日 10:18:17   作者:知識追尋者  
這篇文章主要介紹了springboot之Validation參數(shù)校驗詳細解讀,本篇是關(guān)于springboot的參數(shù)校驗知識,當(dāng)然也適用其它java應(yīng)用,讀完本篇將學(xué)會基本的參數(shù)校驗,自定義參數(shù)校驗和分組參數(shù)校驗,需要的朋友可以參考下

一 Validation參數(shù)校驗

Validation參數(shù)校驗是指在程序運行中對傳進來的參數(shù)進行合法性檢查,以保證程序的正確性和安全性。在實際開發(fā)中,正確的校驗?zāi)軌虮苊庖驉阂廨斎牖蝈e誤輸入而導(dǎo)致的程序崩潰、漏洞等問題。

二 校驗入門

2.1 pom.xml

springboot在 web啟動器中已經(jīng)包含validator包

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

非springboot項目,需要自行引入依賴

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.5.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.el</artifactId>
    <version>3.0.3</version>
</dependency>

2.2 常用約束說明

  • @Null: 元素為 null
  • @NotNull : 元素不為 null
  • @AssertTrue : 元素為 true
  • @AssertFalse : 元素為 false
  • @Min(value) : 數(shù)字的值大于等于指定的最小值
  • @Max(value) : 個數(shù)字的值小于等于指定的最大值
  • @DecimalMin(value) :大數(shù)值大于等于指定的最小值
  • @DecimalMax(value): 大數(shù)值小于等于指定的最大值
  • @Size(max=, min=) : 元素的大小在指定的范圍內(nèi)
  • @Digits (integer, fraction) : 元素是一個數(shù)字,其值必須在可接受的范圍內(nèi)
  • @Past: 一個過去的日期
  • @Future : 一個將來的日期
  • @Pattern(regex=,flag=) :指定的正則表達式
  • @URL:必須是一個URL
  • @Email:必須是email格式
  • @NotBlank: 字符串不能為空
  • @NotEmpty:集合不能為空
  • @Length: 長度必須在指定范圍內(nèi)
  • @Valid :對實體類進行校驗

2.3 實體約束示例

簡單注解約束使用示例如下;如果成員是實體,需要帶上 @Valid 注解;

/**
 * @Author lsc
 * <p> </p>
 */
@Data
public class SysUser {
    private Long id;
    @NotNull(message ="用戶名不能為空")
    @Size(min = 3, max = 5, message = "用戶名長度為{min}-{max}之間")
    private String username;
    @NotNull(message ="昵稱不能為空")
    private String name;
    @NotNull(message ="密碼不能為空")
    private String password;
    @Email(message = "郵箱格式不合法")
    private String email;
    private String gender;
}

2.4 控制層示例

  1. 需要在class加上 @Validated ;
  2. 如果參數(shù)是實體 需要 加上 @Valid 注解
/**
 * @Author lsc
 * <p> </p>
 */
@RestController
@Validated
public class SysUserController {
    // 方法參數(shù)為實體校驗
    @PostMapping("/register")
    public ResponseEntity register(@Valid @RequestBody SysUser sysUser){
        return ResponseEntity.ok(sysUser);
    }
    // 方法參數(shù)校驗
    @GetMapping("user")
    public ResponseEntity getUser(@NotNull(message ="用戶名不能為空") String username) {
        SysUser sysUser = new SysUser();
        sysUser.setName("知識追尋者");
        return ResponseEntity.ok(sysUser);
    }
}

2.5 異常捕獲

全局異常捕獲,當(dāng)出現(xiàn)參數(shù)校驗不合法時捕獲異常,并且返回給前端;

/**
 * @Author lsc
 * <p> </p>
 */
@ControllerAdvice
public class GlobHandler {
    // 捕獲方法參數(shù)校驗異常
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public ResponseEntity constraintViolationExceptionHandler(ConstraintViolationException e){
        Set<ConstraintViolation<?>> message = e.getConstraintViolations();
        HashMap<String, Object> map = new HashMap<>();
        message.stream().forEach(msg -> {
            String path = msg.getPropertyPath().toString();
            String field = path.substring(path.indexOf(".")+1);
            map.put(field,msg.getMessageTemplate());
        });
        return ResponseEntity.ok(map);
    }
    // 捕獲實體參數(shù)校驗異常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResponseEntity resolveMethodArgumentNotValidException(MethodArgumentNotValidException e){
        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
        HashMap<String, Object> map = new HashMap<>();
        allErrors.stream().forEach(error -> {
            FieldError fieldError = (FieldError) error;
            map.put(fieldError.getField(), fieldError.getDefaultMessage());
        });
        return ResponseEntity.ok(map);
    }
}

2.6 請求示例

三 自定義校驗規(guī)則

特殊的字段需要自定義規(guī)則,比如身份證號碼,郵箱,電話等;

定義校驗注解

@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = GenderValidator.class)
@Documented
public @interface Gender {
    String message() default "性別為男或者女";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default {};
}

GenderValidator 實現(xiàn) ConstraintValidator 接口并提供校驗規(guī)則

/**
 * @Author lsc
 * <p> </p>
 */
public class GenderValidator implements ConstraintValidator<Gender, String> {
    // 初始化校驗值
    @Override
    public void initialize(Gender constraintAnnotation) {
    }
    // 校驗規(guī)則
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return "男".equals(value) || "女".equals(value);
    }
}

在成員變量使用 注解

    @Gender()
    private String gender;

四 分組校驗

默認(rèn)情況下,不指定分組都屬于默認(rèn)組;使用分組校驗有利于分層校驗開發(fā);

新建2個接口,一個用于查詢, 一個用于添加

/**
 * @Author lsc
 * <p> </p>
 */
public interface ADD extends Default {
}
public interface Select extends Default {
}

修改 實體校驗規(guī)則,如果不指定分組 默認(rèn)是 Default 組;

    @NotNull(message ="用戶名不能為空",groups = ADD.class)
    @Size(min = 3, max = 5, message = "用戶名長度為{min}-{max}之間")
    private String username;
    @NotNull(message ="昵稱不能為空", groups = Select.class)
    private String name;
    @NotNull(message ="密碼不能為空",groups = ADD.class)
    private String password;
    @Email(message = "郵箱格式不合法", groups = Select.class)
    private String email;

控制層示例,此時只會校驗 ADD 組和 Default組

    // 分組校驗
    @PostMapping("/user")
    public ResponseEntity addUser(@Validated(value = ADD.class) @RequestBody SysUser sysUser){
        return ResponseEntity.ok(sysUser);
    }

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

相關(guān)文章

  • spring 集成 mybatis的實例詳解

    spring 集成 mybatis的實例詳解

    這篇文章主要介紹了spring 集成 mybatis的實例詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SpringMVC實現(xiàn)用戶登錄全過程

    SpringMVC實現(xiàn)用戶登錄全過程

    這篇文章主要介紹了SpringMVC實現(xiàn)用戶登錄全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 在Android中使用WebView在線查看PDF文件的方法示例

    在Android中使用WebView在線查看PDF文件的方法示例

    在Android應(yīng)用開發(fā)中,有時我們需要在客戶端展示PDF文件,以便用戶可以閱讀或交互,這篇文章主要介紹了在Android中使用WebView在線查看PDF文件的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • Java 正則表達式入門詳解(基礎(chǔ)進階)

    Java 正則表達式入門詳解(基礎(chǔ)進階)

    最近看到很多同學(xué)想要學(xué)習(xí)java正則表達式的一些知識,那么腳本之家小編就為大家介紹一下,其實正則表達式實用性很強,處理大幅文字的時候都需要用得到,語法也大同小異
    2017-10-10
  • 如何利用IDEA搭建SpringBoot項目整合mybatis實現(xiàn)簡單的登錄功能

    如何利用IDEA搭建SpringBoot項目整合mybatis實現(xiàn)簡單的登錄功能

    這篇文章主要介紹了如何利用IDEA搭建SpringBoot項目整合mybatis實現(xiàn)簡單的登錄功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • MyBatis?Generator生成數(shù)據(jù)庫模型實現(xiàn)示例

    MyBatis?Generator生成數(shù)據(jù)庫模型實現(xiàn)示例

    這篇文章主要為大家介紹了MyBatis?Generator生成數(shù)據(jù)庫模型實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 詳解Java比較器

    詳解Java比較器

    這篇文章主要介紹了Java比較器的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Springboot如何配置Scheduler定時器

    Springboot如何配置Scheduler定時器

    這篇文章主要介紹了Springboot如何配置Scheduler定時器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot數(shù)據(jù)庫恢復(fù)的兩種方法mysqldump和mysqlbinlog

    SpringBoot數(shù)據(jù)庫恢復(fù)的兩種方法mysqldump和mysqlbinlog

    binlog用來實現(xiàn)主從復(fù)制,也常用來誤刪數(shù)據(jù)庫找回丟失的記錄,本文主要介紹了SpringBoot數(shù)據(jù)庫恢復(fù)的兩種方法mysqldump和mysqlbinlog,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java實現(xiàn)寵物商店管理系統(tǒng)

    Java實現(xiàn)寵物商店管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)寵物商店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論

望奎县| 花莲市| 普安县| 伊通| 博野县| 嘉荫县| 宁都县| 曲靖市| 布尔津县| 房产| 新余市| 延边| 洪湖市| 丽江市| 东辽县| 温泉县| 鄂伦春自治旗| 曲麻莱县| 永济市| 鹤庆县| 阿坝县| 彰化县| 宽甸| 丽水市| 富源县| 台东县| 景洪市| 江都市| 孟连| 抚松县| 曲水县| 西藏| 九寨沟县| 长阳| 景宁| 宣恩县| 三门峡市| 光泽县| 崇文区| 巍山| 黔南|