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

Spring 中@Validated 分組校驗的使用解析

 更新時間:2021年10月20日 09:32:58   作者:妖四靈.Shuen  
這篇文章主要介紹了Spring 中@Validated 分組校驗的使用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring @Validated分組校驗的使用

通過本文你能學(xué)習(xí)到@Validated 的基本使用,以及如何再spring-boot 中進行數(shù)據(jù)異常的統(tǒng)一處理

Spring Validation驗證框架對參數(shù)的驗證機制提供了@Validated(Spring's JSR-303規(guī)范,是標(biāo)準(zhǔn)JSR-303的一個變種),javax提供了@Valid(標(biāo)準(zhǔn)JSR-303規(guī)范),配合BindingResult可以直接提供參數(shù)驗證結(jié)果。

在檢驗入?yún)⑹欠穹弦?guī)范時,使用@Validated或者@Valid在基本驗證功能上沒有太多區(qū)別。但是在分組、注解地方、嵌套驗證等功能上兩個有所不同,總體來說@validated 相當(dāng)于 @Valid 驗證的升級版,功能更加強大。

接下來我們直接看下如何使用

引入POM依賴

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
        </dependency>

定義公共分組class(用于標(biāo)記分組,可以像后面定義在Vo里面,但是建議一些常用的定義在外部),如下

public interface Add {
}
public interface Edit {
}

定義接收數(shù)據(jù)的Vo

注意注解中分組的的使用,為了演示,同時在內(nèi)部定義了一個特殊分組類

 
import com.example.jsr.commmon.Add;
import com.example.jsr.commmon.Edit;
import org.hibernate.validator.constraints.NotBlank; 
import javax.validation.constraints.Pattern; 
public class ParamsVo {
 
    //特殊用于修改年齡 標(biāo)記使用 靈活放置位置
    public interface ModifyAge {
    }
 
    //年齡是1-120之間有效
    public static final String AGE_REG = "/^(?:[1-9][0-9]?|1[01][0-9]|120)$/";
 
    @NotBlank(
            groups = {Edit.class, ParamsVo.ModifyAge.class},
            message = "失敗,id不能為空"
    )
    private String id;
 
    @NotBlank(groups = {Edit.class, Add.class}, message = "失敗,名字不能為空")
    private String name;
 
    //自定義一個正則
    @NotBlank(groups = {Add.class, ParamsVo.ModifyAge.class},
            message = "失敗,請?zhí)顚慳ge"
    )
    @Pattern(regexp = AGE_REG,groups = {Add.class, ParamsVo.ModifyAge.class},
            message = "失敗,請?zhí)顚懻_age"
    )
    private String age; 
    ...省略setter getter 方法....
}

統(tǒng)一異常處理類

 
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
 
/**
 * 全局異常處理
 */
@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public String handlerUnexpectedTypeException(BindException ex){
        BindingResult result = ex.getBindingResult();
        if (result.hasErrors()) {
            FieldError fieldError = result.getFieldError();
            if (fieldError != null) {
                return fieldError.getDefaultMessage();
            }
        }
        return "失敗,請刷新重試";
    } 
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handlerException(Exception ex){
        ex.printStackTrace();
        return "失敗,請刷新重試";
    }
}

測試類

import com.example.jsr.Vo.ParamsVo;
import com.example.jsr.commmon.Add;
import com.example.jsr.commmon.Edit;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
@RequestMapping("/validated/test")
public class ValidatedTestController {
 
    @RequestMapping("/add")
    @ResponseBody
    public String add(
            @Validated(Add.class)ParamsVo paramsVo){
        System.out.println(String.format("add obj = {%s}",paramsVo.toString()));
        return "success";
    } 
    @RequestMapping("/edit")
    @ResponseBody
    public String editAll(
            @Validated({Edit.class,ParamsVo.ModifyAge.class})ParamsVo paramsVo){
        System.out.println(String.format("edit obj = {%s}",paramsVo.toString()));
        return "success"; 
    }
}

頁面效果測試

不填age

填入一個錯誤age

到此為止,基本的使用相信也是沒有問題了

使用@Validated分組遇到的坑

在使用@Validate注解分組校驗時,如果指定分組,所有的需要驗證的屬性都必須添加指定分組才會校驗

解決辦法

沒有指明分組的屬性都屬于Default,所以分組接口繼承Default就可以解決

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

相關(guān)文章

  • 一文解決pom.xml報錯Dependency "xxx" not found的問題

    一文解決pom.xml報錯Dependency "xxx" not f

    我們在使用maven進行jar包管理時有時會遇到pom.xml中報錯Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報錯Dependency "xxx" not found的解決方案,需要的朋友可以參考下
    2024-01-01
  • 這一次搞懂Spring代理創(chuàng)建及AOP鏈?zhǔn)秸{(diào)用過程操作

    這一次搞懂Spring代理創(chuàng)建及AOP鏈?zhǔn)秸{(diào)用過程操作

    這篇文章主要介紹了這一次搞懂Spring代理創(chuàng)建及AOP鏈?zhǔn)秸{(diào)用過程操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java 多線程學(xué)習(xí)詳細(xì)總結(jié)

    Java 多線程學(xué)習(xí)詳細(xì)總結(jié)

    本文主要介紹 Java 多線程的知識資料,這里整理了詳細(xì)的多線程內(nèi)容,及簡單實現(xiàn)代碼,有需要的朋友可以參考下
    2016-09-09
  • JAVA各種加密與解密方式匯總

    JAVA各種加密與解密方式匯總

    在項目開發(fā)中,我們常需要用到加解密算法,本文主要介紹了JAVA各種加密與解密方式匯總,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java中ThreadLocal的使用及原理詳解

    Java中ThreadLocal的使用及原理詳解

    這篇文章主要介紹了Java中ThreadLocal的使用及原理詳解,ThreadLocal是JDK提供的,提供線程本地變量,主要用來存放線程獨有變量和解決參數(shù)傳遞問題的,需要的朋友可以參考下
    2023-09-09
  • mybatis整合spring實現(xiàn)開啟mapper.xml映射文件掃描

    mybatis整合spring實現(xiàn)開啟mapper.xml映射文件掃描

    這篇文章主要介紹了mybatis整合spring實現(xiàn)開啟mapper.xml映射文件掃描,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • mybatis-plus分頁無效問題解決

    mybatis-plus分頁無效問題解決

    本文主要介紹了mybatis-plus分頁無效問題解決,原因是配置分頁插件的版本問題,舊版本和新版本的MyBatis-Plus需要不同的分頁配置,感興趣的可以了解一下
    2025-03-03
  • java中GZIP壓縮解壓類使用實例

    java中GZIP壓縮解壓類使用實例

    這篇文章主要介紹了java中GZIP壓縮解壓類使用實例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java基礎(chǔ)元注解基本原理示例詳解

    Java基礎(chǔ)元注解基本原理示例詳解

    這篇文章主要為大家介紹了Java基礎(chǔ)元注解基本原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • IDEA整合jeesite4.x及安裝教程

    IDEA整合jeesite4.x及安裝教程

    本文給大家介紹IDEA整合jeesite4.x及安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07

最新評論