欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot?如何使用BindingResult校驗(yàn)參數(shù)

 更新時(shí)間:2022年01月26日 11:14:18   作者:MyXieZhiXin  
這篇文章主要介紹了Springboot?如何使用BindingResult校驗(yàn)參數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用BindingResult校驗(yàn)參數(shù)

1、創(chuàng)建一個(gè)參數(shù)對象

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="密碼的長度應(yīng)該在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控制層寫參數(shù)接收的入口

需要注意的是@Valid 和 BindingResult 是一 一對應(yīng)的,如果有多個(gè)@Valid,那么每個(gè)@Valid后面都需要添加BindingResult用于接收bean中的校驗(yàn)信息

@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 -> {
                   //日志打印不符合校驗(yàn)的字段名和錯誤提示
                   log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
                 });
			 for(int i=0;i<fieldErrors.size();i++){
                    //控制臺打印不符合校驗(yàn)的字段名和錯誤提示
			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、傳入?yún)?shù)和控制臺打印結(jié)果

如下圖所示:

log日志編碼集沒有修改所以是亂碼,返回結(jié)果我并沒有返回錯誤信息,在此只是在控制臺打印出來,實(shí)際情況再根據(jù)實(shí)際需要返回給前臺呈現(xiàn)

4、常用校驗(yàn)注解

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

字符串/數(shù)組/集合檢查:(字符串本身就是個(gè)數(shù)組)

  • @Pattern(regexp="reg") 驗(yàn)證字符串滿足正則
  • @Size(max, min) 驗(yàn)證字符串、數(shù)組、集合長度范圍
  • @NotEmpty 驗(yàn)證字符串不為空或者null
  • @NotBlank 驗(yàn)證字符串不為null或者trim()后不為空

數(shù)值檢查:同時(shí)能驗(yàn)證一個(gè)字符串是否是滿足限制的數(shù)字的字符串

  • @Max 規(guī)定值得上限int
  • @Min 規(guī)定值得下限
  • @DecimalMax("10.8") 以傳入字符串構(gòu)建一個(gè)BigDecimal,規(guī)定值要小于這個(gè)值 
  • @DecimalMin 可以用來限制浮點(diǎn)數(shù)大小
  • @Digits(int1, int2) 限制一個(gè)小數(shù),整數(shù)精度小于int1;小數(shù)部分精度小于int2
  • @Digits 無參數(shù),驗(yàn)證字符串是否合法
  • @Range(min=long1,max=long2) 檢查數(shù)字是否在范圍之間 這些都包括邊界值

日期檢查:Date/Calendar

  • @Post 限定一個(gè)日期,日期必須是過去的日期
  • @Future 限定一個(gè)日期,日期必須是未來的日期

其他驗(yàn)證:

  • @Vaild 遞歸驗(yàn)證,用于對象、數(shù)組和集合,會對對象的元素、數(shù)組的元素進(jìn)行一一校驗(yàn)
  • @Email 用于驗(yàn)證一個(gè)字符串是否是一個(gè)合法的右鍵地址,空字符串或null算驗(yàn)證通過
  • @URL(protocol=,host=,port=,regexp=,flags=) 用于校驗(yàn)一個(gè)字符串是否是合法UR

BindingResult 作用原理

controller代碼

@RequestMapping("")
    public String index(@Valid User user , BindingResult bindingResult){
        if (bindingResult.hasErrors()){
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            ObjectError objectError = allErrors.get(0);
            System.out.println(objectError.getDefaultMessage());
            System.out.println(objectError.getObjectName());
            System.out.println(allErrors);
        }
        return "index";
    }

請求先來到DispatcherServlet的doDispatch 方法,最終會調(diào)用ModelAttributeMethodProcessor#resolveArgument方法

調(diào)用DataBinder#validate方法后調(diào)用ConstraintTree#validateSingleConstraint,由它來調(diào)用具體的驗(yàn)證器

具體的驗(yàn)證器

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于 Java 的數(shù)據(jù)結(jié)構(gòu)鏈表

    關(guān)于 Java 的數(shù)據(jù)結(jié)構(gòu)鏈表

    這篇文章主要介紹了關(guān)于 Java 的數(shù)據(jù)結(jié)構(gòu)鏈表的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • Java?swing實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問問題

    Java?swing實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問問題

    這篇文章主要介紹了Java?swing實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問,本次實(shí)驗(yàn)需要做一個(gè)GUI界面和一個(gè)連接查詢功能,在論壇上借鑒了其他大佬獲取網(wǎng)站內(nèi)容的部分代碼,然后自己做了一個(gè)及其簡陋的swing界面,算是把這個(gè)實(shí)驗(yàn)完成了,需要的朋友可以參考下
    2022-09-09
  • Elasticsearch模糊查詢詳細(xì)介紹

    Elasticsearch模糊查詢詳細(xì)介紹

    這篇文章主要給大家介紹了關(guān)于Elasticsearch模糊查詢的相關(guān)資料,在數(shù)據(jù)庫查詢中模糊查詢是一種強(qiáng)大的技術(shù),可以用來搜索與指定模式匹配的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • Spring Data JPA例子代碼[基于Spring Boot、Mysql]

    Spring Data JPA例子代碼[基于Spring Boot、Mysql]

    這篇文章主要介紹了Spring Data JPA例子代碼[基于Spring Boot、Mysql],小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java超詳細(xì)分析抽象類和接口的使用

    Java超詳細(xì)分析抽象類和接口的使用

    在類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-04-04
  • Java多線程中的Phaser使用解析

    Java多線程中的Phaser使用解析

    這篇文章主要介紹了Java多線程中的Phaser使用解析,java多線程技術(shù)提供了Phaser工具類,Phaser表示“階段器”,用來解決控制多個(gè)線程分階段共同完成任務(wù)的情景問題,其作用相比CountDownLatch和CyclicBarrier更加靈活,需要的朋友可以參考下
    2023-11-11
  • Java8并行流中自定義線程池操作示例

    Java8并行流中自定義線程池操作示例

    這篇文章主要介紹了Java8并行流中自定義線程池操作,結(jié)合實(shí)例形式分析了并行流的相關(guān)概念、定義及自定義線程池的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • OKHttp3(支持Retrofit)的網(wǎng)絡(luò)數(shù)據(jù)緩存Interceptor攔截器的實(shí)現(xiàn)

    OKHttp3(支持Retrofit)的網(wǎng)絡(luò)數(shù)據(jù)緩存Interceptor攔截器的實(shí)現(xiàn)

    本篇文章主要介紹了OKHttp3(支持Retrofit)的網(wǎng)絡(luò)數(shù)據(jù)緩存Interceptor攔截器的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java 流操作對文件的分割和合并的實(shí)例詳解

    java 流操作對文件的分割和合并的實(shí)例詳解

    這篇文章主要介紹了java 流操作對文件的分割和合并的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java通過反射將 Excel 解析成對象集合實(shí)例

    Java通過反射將 Excel 解析成對象集合實(shí)例

    這篇文章主要介紹了Java通過反射將 Excel 解析成對象集合實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論