Springboot 使用BindingResult校驗參數


1、創建一個參數對象

import java.util.List;

import javax.validation.constraints.Min;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;

public class Parameter {

@NotEmpty(message="姓名不能為空")
private String name;

@Min(value = 18, message = "年齡必須大於18歲")
private int age;

@NotEmpty(message="hobbies不能為空")
private List<String> hobbies;

@NotBlank(message="賬號不能為空")
private String account;

@Size(min=5,max=10,message="密碼的長度應該在5和10之間") 
private String password;

@Email(message="郵箱格式錯誤")
private String email;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}

}

 


2、controller控制層寫參數接收的入口,需要注意的是@Valid 和 BindingResult 是一 一對應的,如果有多個@Valid,那么每個@Valid后面都需要添加BindingResult用於接收bean中的校驗信息

@RequestMapping(value = "/test", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<Pesponsibles> testBindingResult(@Valid @RequestBody Parameter parameter,BindingResult bindingResult)
{
log.info("test start");
Pesponsibles pesponsibles=new Pesponsibles();
if(bindingResult.hasErrors()){
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
fieldErrors.forEach(fieldError -> {
//日志打印不符合校驗的字段名和錯誤提示
log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
});
for(int i=0;i<fieldErrors.size();i++){
//控制台打印不符合校驗的字段名和錯誤提示
System.out.println("error field is :"+fieldErrors.get(i).getField()+",message is :"+fieldErrors.get(i).getDefaultMessage());
}
// pesponsibles.setError_msg(fieldErrors);
return new ResponseEntity<>(pesponsibles, HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(pesponsibles, HttpStatus.OK);
}

 


3、傳入參數和控制台打印結果如下圖所示:

 

 

 

 

 

 

log日志編碼集沒有修改所以是亂碼,返回結果我並沒有返回錯誤信息,在此只是在控制台打印出來,實際情況再根據實際需要返回給前台呈現

4、常用校驗注解

@Null 只能是null
@NotNull 不能為null 注意用在基本類型上無效,基本類型有默認初始值
@AssertFalse 必須為false
@AssertTrue 必須是true

字符串/數組/集合檢查:(字符串本身就是個數組)
@Pattern(regexp="reg") 驗證字符串滿足正則
@Size(max, min) 驗證字符串、數組、集合長度范圍
@NotEmpty 驗證字符串不為空或者null
@NotBlank 驗證字符串不為null或者trim()后不為空

數值檢查:同時能驗證一個字符串是否是滿足限制的數字的字符串
@Max 規定值得上限int
@Min 規定值得下限
@DecimalMax("10.8") 以傳入字符串構建一個BigDecimal,規定值要小於這個值 
@DecimalMin 可以用來限制浮點數大小
@Digits(int1, int2) 限制一個小數,整數精度小於int1;小數部分精度小於int2
@Digits 無參數,驗證字符串是否合法
@Range(min=long1,max=long2) 檢查數字是否在范圍之間
這些都包括邊界值

日期檢查:Date/Calendar
@Post 限定一個日期,日期必須是過去的日期
@Future 限定一個日期,日期必須是未來的日期

其他驗證:
@Vaild 遞歸驗證,用於對象、數組和集合,會對對象的元素、數組的元素進行一一校驗
@Email 用於驗證一個字符串是否是一個合法的右鍵地址,空字符串或null算驗證通過
@URL(protocol=,host=,port=,regexp=,flags=) 用於校驗一個字符串是否是合法UR


免責聲明!

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



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