使用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來發送請求~~