客戶端傳入數據的校驗-RestController進階


 使用Hibernate Validator進行數據校驗

 

Bean Validation注解(需要加入相關依賴,在SpringBoot中可以直接使用,SpringBoot會幫我們直接加入)

@Null 驗證對象是否為空(屬性必須為空,客戶不能傳入此屬性,否則會報錯)

@NotNull 驗證對象是否為非空(屬性不為空,客戶必須傳入此屬性,否則會報錯)

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

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

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

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

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

@AssertTrue 驗證Boolean對象是否為true

@AssertFalse 驗證Boolean對象是否為false

@Valid 級聯驗證注解

 

注解可以用在成員變量上:

package com.example.demo;

import java.util.Date;
import java.util.List;

import javax.validation.Valid;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

import com.fasterxml.jackson.annotation.JsonFormat;


public class TvSeriesDto {
    @Null private int id;
    @NotNull private String name;
    @DecimalMin("1") private int seasonCount;
    //@Valid表示要級聯校驗;@Size(min=2)表示這個列表至少要有2項內容,否則通不過校驗
    @Valid @NotNull @Size(min=2) private List<TvCharacterDto> tvCharacters; 
    
    //如果想用long型的timestamp表示日期,可用:@JsonFormat(shape = JsonFormat.Shape.NUMBER)
    @JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd")
    //@Past表示只接受過去的時間,比當前時間還晚的被認為不合格
    @Past private Date originRelease;
    
    public TvSeriesDto() {
        
    }
    
    public TvSeriesDto(int id, String name, int seasonCount, Date originRelease) {
        this.id = id;
        this.name = name;
        this.seasonCount = seasonCount;
        this.originRelease = originRelease;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSeasonCount() {
        return seasonCount;
    }
    public void setSeasonCount(int seasonCount) {
        this.seasonCount = seasonCount;
    }
    public Date getOriginRelease() {
        return originRelease;
    }
    public void setOriginRelease(Date originRelease) {
        this.originRelease = originRelease;
    }

    @Override
    public String toString() {
        return "TvSeriesDto [id=" + id + ", name=" + name + ", seasonCount=" + seasonCount + ", originRelease="
                + originRelease + "]";
    }
    
}

 

可以用在方法上:

 

 

 

 

 

我們發現,如果傳入參數不符合驗證要求就會被退回去;通過BindingResult,無論傳入參數是否符合要求,

都可以通過BindingResult傳入程序中,交由程序進行作判斷。如下:

 

 

 

客戶端同意使用postman來發送請求~~

 

 


免責聲明!

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



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