【Java】使用@Valid+BindingResult進行controller參數校驗


1.0  @Valid

@Valid注解用於校驗,所屬的包: javax.validation.Valid.

你可以定義實體,在實體的屬性上添加校驗規則,在API接收數據時添加@Valid注解,這時你的實體將會開啟一個校驗的功能。

## 空檢查

@NotEmpty:用在集合類上面;不能為null,而且長度必須大於0 

@NotBlank: 用在String上面;只能作用在String上,不能為null,而且調用trim()后,長度必須大於0 

@NotNull:用在基本類型上;不能為null,但可以為empty。

## 長度檢查

@Size(min=,max=):驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內  

不要錯用了異常類型,比如在int上不可用@size

@Length(min=, max=) : 只適用於String 類型

##  Booelan檢查

@AssertTrue:   驗證 Boolean 對象是否為 true  

@AssertFalse:  驗證 Boolean 對象是否為 false 

##  日期檢查

@Past: 驗證 Date 和 Calendar 對象是否在當前時間之前  

@Future: 驗證 Date 和 Calendar 對象是否在當前時間之后  

@Pattern: 驗證 String 對象是否符合正則表達式的規則

##  數值檢查

建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為"" 時無法轉換為int,但可以轉換為Stirng為"",Integer為null

@Min:  驗證 Number 和 String 對象是否大等於指定的值  

@Max:  驗證 Number 和 String 對象是否小等於指定的值  

@DecimalMax:  被標注的值必須不大於約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符串表示.小數存在精度

@DecimalMin: 被標注的值必須不小於約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符串表示.小數存在精度

@Digits:  驗證 Number 和 String 的構成是否合法  

@Digits(integer=,fraction=):  驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。

 

2.0  BindingResult 

 

 

Spring驗證的錯誤返回 

@Valid 和 BindingResult 是一一對應的,如果有多個@Valid,那么每個@Valid后面跟着的BindingResult就是這個@Valid的驗證結果,順序不能亂

 
 1.首先在參數實體類上面加上相關的驗證信息
public class PublicUserForm implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 手機號
     */
    @NotBlank(message = "{required}")
    @Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
    private String telephone;

    /**
     * 密碼
     */
    private String password;

2.controller層

public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception {

        //在這里,我們判斷參數是否通過校驗
        if (bindingResult.hasErrors()) {
            Map<String,String> errorMsg = new HashMap<>();
            for (FieldError item:bindingResult.getFieldErrors()) {
                errorMsg.put(item.getField(),item.getDefaultMessage());
            }
            //自定義的返回,並將錯誤信息返回
            return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
        }

        PublicUser publicUser = publicUserService.regist(publicUserForm);
        return new ResponseResult(true,200,"訪問成功!",null);
    }

 

 

 

轉 : https://www.cnblogs.com/jxd283465/p/12015661.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM