客戶端傳入資料的校驗-RestController進階
阿新 • • 發佈:2018-12-13
使用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來發送請求~~