關于spring MVC中加載多個validator的方法。

首先講下什么叫做validator:

validator是驗證器,可以驗證后臺接受的數據,對數據做校驗。

SpringMVC服務器驗證有兩種方式,一種是基于Validator接口,一種是使用Annotaion JSR-303標準的驗證。

1.使用Annotaion JSR-303標準的驗證

使用這個需要導入支持JSR-303標準的包,建議使用hibernate?Validator這個包,先看這個標準的原生標注:

限制說明
@Null限制只能為null
@NotNull限制必須不為null
@AssertFalse限制必須為false
@AssertTrue限制必須為true
@DecimalMax(value)限制必須為一個不大于指定值的數字
@DecimalMin(value)限制必須為一個不小于指定值的數字
@Digits(integer,fraction)限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction
@Future限制必須是一個將來的日期
@Max(value)限制必須為一個不大于指定值的數字
@Min(value)限制必須為一個不小于指定值的數字
@Past限制必須是一個過去的日期
@Pattern(value)限制必須符合指定的正則表達式
@Size(max,min)限制字符長度必須在min到max之間
@Past驗證注解的元素值(日期類型)比當前時間早
@NotEmpty驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@NotBlank驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的空格
@Email驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

要使用很簡單,在需要驗證的變量前面加上該Annotation即可,看下面使用后的User

1 public class User {
2     @NotEmpty(message = "用戶名不能為空")
3     private String username;
4     @Size(min=6 ,max= 20 ,message = "密碼長度不符合標準")
5     private String password;
6     private String nickname;
7 
8    ......
9 }

然后再Controller里面的方法上對需要驗證的對象或數據加入@Validated就可以了。

2。使用Validator接口

主要是去做Validator實體類,去實現Validator接口:

StudentValidator.java

public class StudentValidator implements Validator{  public boolean supports(Class<?> clazz) {  return Student.class.equals(clazz);  }  public void validate(Object obj, Errors e) {  ValidationUtils.rejectIfEmpty(e, "name", "name.empty");  ValidationUtils.rejectIfEmpty(e, "gender", "null");  ValidationUtils.rejectIfEmpty(e, "age", "null");  Student s = (Student)obj;  if(s.getAge() < 18){  e.rejectValue("age","young");  }else if(s.getAge() > 50){  //e.reject("age", "old");  
        }  }  }  

TeacherValidator.java

public class TeacherValidator implements Validator{  public boolean supports(Class<?> clazz) {  return Teacher.class.equals(clazz);  }  public void validate(Object obj, Errors e) {  ValidationUtils.rejectIfEmpty(e, "name", "name.empty");  ValidationUtils.rejectIfEmpty(e, "gender", "null");  ValidationUtils.rejectIfEmpty(e, "age", "null");  Teacher t= (Teacher)obj;  }  }  

PeopleContorller.java

@Controller
public class UserController {@Autowiredprivate StudentValidator studentValidator;@Autowiredprivate TeacherValidator teacherValidator;@RequestMapping(value="/saveStudent", method = RequestMethod.POST)public void saveStudent(@Valid @RequestBody Student student){.......}@RequestMapping(value="/saveTeacher", method = RequestMethod.POST)public void saveStudent(@Valid @RequestBody Teacher teacher){.......}@InitBinderpublic void initBinder(WebDataBinder binder) {//這個方法加載驗證器,判斷請求過來的要驗證的對象,加載相對于的驗證器。此方法是根據請求加載的,即n次請求就加載n次該方法if(studentValidator.supports(binder.getTarget().getClass())&&!studentValidator.getClass().getName().contains("org.springframework")){binder.addValidators(studentValidator);}else{binder.addValidators(teacherValidator);}}
}

ps:需要做判斷才能實現多個驗證器的存在。

?

轉載于:https://www.cnblogs.com/wangzun/p/7157107.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試時,面試官到底在考察什么?

作者&#xff1a;白海飛出處&#xff1a;極客時間《面試現場》專欄 先看一段面試對話&#xff0c;“大面”是一位久經沙場的面試官&#xff0c;小明就是今天的應聘者。一通面試下來&#xff0c;前面的技術問題小明都對答如流&#xff0c;雙方相談甚歡&#xff0c;接下來面試官“…

NoSQL-MongoDB with python

前言&#xff1a; MongoDB&#xff0c;文檔存儲型數據庫&#xff08;document store&#xff09;。NoSQL數據庫中&#xff0c;它獨占鰲頭&#xff0c;碾壓其他的NoSQL數據庫。 使用C開發的&#xff0c;性能僅次C。與redis一樣&#xff0c;開源、高擴展、高可用。 基于分布式文件…

RHCS

云計算與大數據 黑洞 RHCS(概念篇) 一、 什么是RHCS RHCS是Red Hat Cluster Suite的縮寫&#xff0c;也就是紅帽子集群套件&#xff0c;RHCS是一個能夠提供高可用性、高可靠性、負載均衡、存儲共享且經濟廉價的集群工具集合&#xff0c;它將集群系統中三大集群架構融合一體&…

深度圖壓縮之-高低8位拆分保存

使用kinect相機保存數據&#xff0c;為了減少保存的數據集量&#xff0c;對圖像進行壓縮。將彩色圖像直接壓縮成.mp4格式&#xff0c;此時圖像上的一些高頻信息會被損失掉。 為了能夠讓深度圖有比較高的保真度&#xff0c;減少深度圖上高頻信息的損失&#xff0c;我們將16位的…

linux 一個超簡單的makefile

2019獨角獸企業重金招聘Python工程師標準>>> makefile 自動化變量&#xff1a; $ : 規則的目標文件名 例如&#xff1a;main:main.o test.o g -Wall -g main.o test.o -o main 可以寫成&#xff1a; main:main.o test.o g -Wall -g main.o test.o -o $ $< : …

poj2480(利用歐拉函數的積性求解)

題目鏈接: http://poj.org/problem?id2480 題意&#xff1a;∑gcd(i, N) 1<i <N&#xff0c;就這個公式&#xff0c;給你一個n&#xff0c;讓你求sumgcd(1,n)gcd(2,n)gcd(3,n)…………gcd(n-1,n)gcd(n,n),&#xff08;1<n<2^31&#xff09;是多少&#xff1f; 放…

跨域問題

一、為什么會有跨域問題&#xff1f; 是因為瀏覽器的同源策略是對ajax請求進行阻攔了&#xff0c;但是不是所有的請求都給做跨域&#xff0c;像是一般的href屬性&#xff0c;a標簽什么的都不攔截。 二、解決跨域問題的兩種方式 JSONPCORS 三、JSONP 先簡單來說一下JSONP&#x…

PAT A1052

這個需要注意的是相關的string轉整數或者double的函數&#xff1b;詳見這個鏈接blog #include <iostream> #include <string> using namespace std; bool isPrime(int n) {if (n 0 || n 1) return false;for (int i 2; i * i < n; i)if (n % i 0) return fa…

php審計學習:xdcms2.0.8注入

注入點Fields: 注冊頁面會引用如下方法: $fields 變量是從 $fields$_POST[fields]; 這里獲取&#xff0c; 在代碼里沒有過濾。 打印 fields 數據查看: 從代碼上看 $field_sql.",{$k}{$f_value}"; 最終會變成: ,truename111111,email12345 因為 $field_sql 最終會引入…

windows下安裝python和Python-opencv

背景&#xff1a;目前基于python的圖像處理和機器視覺的研究還挺多&#xff0c;最近不是在研究目標檢測和目標跟蹤的算法&#xff0c;由于檢測和跟蹤的環境比較簡單所以從不帶學習的跟蹤方法&#xff0c;在搜索資料時搜到這個網站&#xff0c;是對opencv中的目標跟蹤算法的一個…

捋一捋js面向對象的繼承問題

說到面向對象這個破玩意&#xff0c;曾經一度我都處于很懵逼的狀態&#xff0c;那么面向對象究竟是什么呢&#xff1f;其實說白了&#xff0c;所謂面向對象&#xff0c;就是基于類這個概念&#xff0c;來實現封裝、繼承和多態的一種編程思想罷了。今天我們就來說一下這其中繼承…

java8簡單入門

1、介紹 本片文章會從一下幾個知識點進行介紹&#xff1a; 函數式接口 FunctionalInterfaceLambda 表達式函數引用 Function ReferenceStream看了幾篇關于 java8 入門的例子&#xff0c;其中引入了許多令人期待已久的特性&#xff08;雖然我沒有過這樣的體會&#xff09;&#…

玩轉帶外觸發的單目相機之一

背景&#xff1a;去年開始研究vins,但是只是用了普通的相機&#xff0c;然后將IMU和相機粘在一起&#xff0c;然后就是聯合標定相機和IMU。VINS使用的相機是帶有外觸發的&#xff0c;還進行了相機和IMU的硬件時間同步。當時我特別想買個帶外觸發的相機&#xff0c;一直沒找到資…

基于django的視頻點播網站開發-step11-后臺用戶管理功能...

用戶管理功能&#xff0c;包含用戶添加、列表展示、編輯、刪除四大功能。下面我們一一揭曉。 用戶添加 我們先實現用戶添加功能&#xff0c;我們現在urls.py下添加相關的路由 path(user_add/, views.UserAddView.as_view(), nameuser_add), path(user_list/, views.UserListVie…

BZOJ 1070 拆點 費用流

1070: [SCOI2007]修車 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 5860 Solved: 2487[Submit][Status][Discuss]Description 同一時刻有N位車主帶著他們的愛車來到了汽車維修中心。維修中心共有M位技術人員&#xff0c;不同的技術人員對不同 的車進行維修所用的時間是不…

分布式之數據庫和緩存雙寫一致性方案解析

先做一個說明&#xff0c;從理論上來說&#xff0c;給緩存設置過期時間&#xff0c;是保證最終一致性的解決方案。這種方案下&#xff0c;我們可以對存入緩存的數據設置過期時間&#xff0c;所有的寫操作以數據庫為準&#xff0c;對緩存操作只是盡最大努力即可。也就是說如果數…

使用python從csv文件中讀入兩列擬合直線

背景&#xff1a;要判斷跟蹤算法在控制目標物走直線的情況下跟蹤的軌跡是否為直線&#xff0c;我保存下來跟蹤算法跟蹤到的目標的中心點在圖像上的像素位置&#xff0c;然后擬合出穿過這些點的直線&#xff0c;然后計算這些點距離直線的平均距離來判斷跟蹤的精度。&#xff08;…

window document

1 打開一個新窗口 var newDocwindow.open("text/html","replace");var txt"<html><body>Learning about the DOM is FUN!</body></html>";newDoc.document.write(txt);newDoc.close(); //該方法將關閉 open() 方法打開…

‘(‘:illegal token on right side of ‘::‘

背景&#xff1a;想整理升級一下代碼&#xff0c;添加了兩個類&#xff0c;再一編譯代碼&#xff0c;出現了好多這樣的錯誤提示“(:illegal token on right side of ::”&#xff0c;我很納悶這是啥問題&#xff0c;我就使用“注釋法”來定位出錯的位置&#xff0c;我發現把所有…

mysql-數據庫操作

doc界面操作mysql:<br/> 以phpstudy為例 登錄數據庫&#xff1a;進入phpstudy/mysql/bin下&#xff0c;mysql -u用戶名 -p密碼 選擇數據庫&#xff1a;use 數據庫名; 設置編碼格式&#xff1a;set names gbk; 查看表結構或字段信息&#xff1a;desc 表名; 建立數據庫&…