1. 程式人生 > >客戶端傳入資料的校驗-RestController進階

客戶端傳入資料的校驗-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來發送請求~~