Hibernate validator使用和自定義validator及整合Spring MVC
Hibernate validator使用
匯入validation-api-xxx.jar 以及 hibernate-validator-xxx.Final.jar
需要檢查的java bean Entity.java
- import javax.validation.constraints.Max;
-
import
- public class Entity {
- 3) //最大值為3 (value=
-
private
int
- 1) //字串長度最大為1,hibernate 擴充套件的 (max=
- private String name;
- public int getAge() {
-
return
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
- import java.util.Set;
- import javax.validation.ConstraintViolation;
- import javax.validation.Validation;
- import javax.validation.Validator;
- import javax.validation.ValidatorFactory;
- public class Tv {
- public static void main(String[] args) {
- ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
- Validator validator = factory.getValidator();
- Entity entity = new Entity();
- entity.setAge( 12);
- entity.setName( "admin");
- Set<ConstraintViolation<Entity>> constraintViolations = validator.validate(entity);
- for (ConstraintViolation<Entity> constraintViolation : constraintViolations) {
- System.out.println( "物件屬性:"+constraintViolation.getPropertyPath());
- System.out.println( "國際化key:"+constraintViolation.getMessageTemplate());
- System.out.println( "錯誤資訊:"+constraintViolation.getMessage());
- }
- }
- }
這裡有一個國際化的key值,國際化檔案在org.hibernate.validator下面的一系列的properites檔案裡面,如果需要自定義那麼可以拷貝出來放在src目錄下
這裡我們拷貝一個出來,新增一個key為maxlength=字串長度最大不能超過{max} ,可以使用動態引數,這裡的max值就是註解裡面設定的值 然後修改Entity.java,name屬性的message="{maxlength}"
- 1,message= "{maxlength}") //{maxlength}對應配置檔案中的key. 必須有{} (max=
- private String name;
自定義validator
首先自定義一個註解CannotContainSpaces (不能包含空格)
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- //具體的實現 (validatedBy = CannotContainSpacesValidator.class)
- ( { java.lang.annotation.ElementType.METHOD,
- java.lang.annotation.ElementType.FIELD })
- (java.lang.annotation.RetentionPolicy.RUNTIME)
- public CannotContainSpaces {
- String message() default "{Cannot.contain.Spaces} "; //提示資訊,可以寫死,可以填寫國際化的key
- int length() default 5;
- //下面這兩個屬性必須新增
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default {};
- }
- import javax.validation.ConstraintValidator;
- import javax.validation.ConstraintValidatorContext;
- public class CannotContainSpacesValidator implements ConstraintValidator<CannotContainSpaces, String> {
- private int len;
- /**
- * 初始引數,獲取註解中length的值
- */
- public void initialize(CannotContainSpaces arg0) {
- this.len = arg0.length();
- }
- public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
- if(str != null){
- if(str.indexOf( " ") < 0){
- return true;
- }
- } else{
- constraintValidatorContext.disableDefaultConstraintViolation(); //禁用預設的message的值
- //重新新增錯誤提示語句
- constraintValidatorContext
- .buildConstraintViolationWithTemplate( "字串不能為空").addConstraintViolation();
- }
- return false;
- }
- }
- private String name;
當name為null的時候
整合Spring MVC
首先新增配置檔案內容(實體類裡面的註解與上面完全相同)
- <!-- 國際化配置 -->
- <bean id="localeResolver"
- class= "org.springframework.web.servlet.i18n.CookieLocaleResolver" />
- <bean id="messageSource"
- class= "org.springframework.context.support.ReloadableResourceBundleMessageSource">
- <property name="basenames">
- <list>
- <value>classpath:messages/messages </value>
- <value>classpath:messages/Validation </value>
- </list>
- </property>
- <property name="useCodeAsDefaultMessage" value="true" />
- </bean>
- <!-- 註冊驗證器 -->
- <mvc:annotation-driven validator="validator" />
- <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
- <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
- <!-- 這裡配置將使用上面國際化配置的messageSource -->
- <property name="validationMessageSource" ref="messageSource"/>
- </bean>
- /**
- * 這裡的@Valid必須書寫, bindingResult引數也必須書寫在後面,否則驗證不通過就會返回400
- * @param entity
- * @param result
- * @return
- */
- "/valid") (value=
- public String validator(@Valid Entity entity,BindingResult result){
-
相關推薦
Hibernate validator使用和自定義validator及整合Spring MVC
Hibernate validator使用 匯入validation-api-xxx.jar 以及 hibernate-validator-xxx.Final.jar 需要檢查的java bean Entity.java
Hibernate Validator:自定義驗證
但有的時候,Hibernate Validator自帶的不能滿足需求,因此就需要我們自定義。 方法如下: 1、建立一個註解 2、實現對該註解的解析 3、把該註解和解析類關聯在一起 比如我們要建立一個違禁詞註解: 1、預設不允許字串中出現有“mmp
spring boot 自定義Validator註解
pack oot info 周期 pac tps var 虛擬 mage spring boot在Post接受一個對象參數的時候可以使用@Valid去驗證,如下代碼 在創建一個User類 上面的@NotBlank和@Past就做了一個判斷,如何做類似的註解用來驗證數據
Jquery Validate 預設校驗規則、jQuery.validator.addMethod自定義驗證方法---例子
一、Jquery Validate 預設校驗規則 (1)、required:true 必輸欄位 (2)、remote:"remote-valid.jsp" 使用ajax方法呼叫remote-valid.jsp驗證輸入值 (3)、email:tru
jQuery.validator.addMethod 自定義驗證方法
1.$.validator.addMethod 方法自定義驗證介紹 該方法可用於我們平時給<input type=" "> 指定type時使用,目的就是可以讓我們自己定義想要驗證的方法,好玩性很高,可以自定義一些通用的驗證,比如手機號碼、身份證等。 2.介紹引數和用法 方法:$.valida
android藍芽4.0BLE及2.0 2.1 apk 串列埠助手帶16個自定義按鍵和自定義指令 字元接收 十六進位制或字元傳送
android藍芽4.0BLE apk 帶16個自定義按鍵和自定義指令 字元接收 https://pan.baidu.com/s/1eRSfprO android藍芽2.0 2.1 apk 帶16個自定義按鍵和自定義指令 字元接收 帶自動連線 https://pan.b
Log4J日誌配置詳解和自定義log4j日誌級別及輸出日誌到不同檔案實現方法
package com.jo.work.log4j; import java.util.Enumeration; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.
ionic tabs完美自定義背景及點選和正常的顏色
上一篇提到自定義tabs,但是因為時間關係及闡述一點導航欄的東西,沒有完成,這篇接上一篇,接著來自定義tabs,ionic中已經內建了預設的幾種樣式,基本也能滿足了自己的應用,不過公司專案就不行了,公司專案都是ui設計出來的,只能自定義,看下自定義後的最終效果,
Oracle異常處理及舉例(Oracle預定義異常和自定義異常)
PL/SQL 異常處理 Oracle系統異常分別為兩大類: 預定義異常:Oracle系統自身提供 自定義異常:Oracle不知曉無法控制的異常,特定的業務邏輯。由使用者在程式中定義,Oracle自動引發Oracle常見的預定義異常 ZERO_DIVIDE
jquery form validator 驗證 自定義 方法
//中英文字元長度 String.prototype.mb_length = function(){ var len = 0; for(var i = 0; i < this.length; i++) { len += (th
iOS整合極光推送 通知 和 自定義訊息
支援的版本 r1.2.5 以後。 功能說明 只有在前端執行的時候才能收到自定義訊息的推送。 從jpush伺服器獲取使用者推送的自定義訊息的內容、標題、附件欄位等。 實現方法 獲取iOS的推送內容需要在delegate類中註冊通知並實現回撥方法。 1、在方法-
SSM + Shiro 整合 (5)- 自定義過濾器及許可權解析器、介紹許可權匹配流程
關於 Shiro 的許可權匹配器和過濾器 上一節,我們實現了自定義的 Realm,方式是繼承 AuthorizingRealm 這個抽象類,分別實現認證的方法和授權的方法。 這一節實現的程式碼的執行順序: 1、Shiro定義的過濾器和自定義的過濾器,在
1. PMD 使用,編譯和自定義規則
自定義 pmd 規則 一 PMD簡介PMD是一款代碼靜態檢查工具,可以檢查出很多代碼中潛在的bug以及讓人感到疑惑的代碼,具體大家可以百度下。二 PMD源代碼下載下載地址:https://github.com/pmd/pmd/tree/pmd/5.5.x需要註意的是註意選擇branch,一般選擇最
DOM內容操作和自定義、樣式改變
abcdefg result 定義 tel class abcde inner 參數 fun 自定義 function 方法名或函數名(參數1,參數2,、、、) { 方法體; return返回值;(可不寫) } function a
001_自定義過濾及添加文件內容腳本(nginx)
parser sys idt fin rip readlines pat utf default 一、工作中遇到sed添加及修改在nginx末尾添加太麻煩了 需求:隨意查找添加一條以前不存在的內容加到"}"前一行 實現: #!/usr/bin/env python #
Qt自定義按鈕及不同狀態下圖片的切換
q自定義窗體、任意形狀的窗體、qt自定義按鈕 好久沒有使用Qt了,最近在做窗體時做了一個自定義的鈕銨,剛開始是想通過修改其MASK和ICON的 方式來實現。確發現效果總是不太如意,如是幹脆自已定義了一個XPushButton。也將其實現方式記錄發 布出來。以方便日後自已使用和給有相應問題的朋友一個小小的
EL函數和自定義EL函數
asm pex cli servle cti 編寫代碼 lower sed 添加 簡介 EL原本是JSTL1.0中的技術(所以EL和JSTL感情如此好就是自然的了),但是從JSP2.0開始,EL就分離出來納入了JSP的標準了。但是EL函數還是和JSTL技術綁定在一起。下面將
Android零基礎入門第39節:ListActivity和自定義列表項
arraylist component save 高速 ram 如果 view設置 ren 屬性 相信通過前兩期的學習,以及會開發最簡單的一些列表界面了吧,那麽本期接著來學習更多方法技巧。 一、使用ListActivity 如果程序的窗口僅僅需要
java Collections.sort()實現List排序的默認方法和自定義方法
public get object 順序 text main 輸出 any 比較 1.java提供的默認list排序方法 主要代碼: List<String> list = new ArrayList();list.add("劉媛媛"); list.add("王
freemarker實現自定義指令和自定義函數
數據 dir variables macro 內置 引擎 eem fig turn 自定義指令: 1.指令在前臺實現 <#macro name param1,param2,param3...paramN> </#macro> 2.指令在後臺實