【hibernate-validator+SpringMVC】後臺參數校驗框架

hibernate-validator+SpringMVChtml

簡介:簡單說,就是對Entity進行校驗。java

一、導包,沒有很嚴謹的對應關係,因此我用了比較新的版本,支持更多的註解。git

 
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>6.0.5.Final</version>
</dependency>web

二、Spring配置文件中:正則表達式

<!-- swagger2 -->
<!--http://localhost:8080/zztabc/swagger-ui.html#/-->
<!--<mvc:default-servlet-handler />
<mvc:resources
mapping="/webjars/**"
location="classpath:/META-INF/resources/webjars/" />-->

<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<!-- 校驗錯誤信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 資源文件名 -->
<!--<property name="basename" value="classpath:validationMessages"/>-->
<!-- 對資源文件內容緩存時間,單位秒 -->
<property name="fileEncodings" value="GBK"/>
<property name="defaultEncoding" value="GBK"/>
<property name="cacheSeconds" value="120"/>
</bean>算法

 


三、entity:spring

package com.zztabc.controller.vali;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;

/**
* 員工表
* @author ZX
*
*/
public class Emp implements Serializable{
private static final long serialVersionUID = 1L;

@NotBlank(message="名字不能爲空或者空串")
@Length(min=2,max=10,message="名字必須由2~10個字組成")
private String name;
@NotNull
@Min(value = 18,message = "年齡應該小於18")
private Integer age;
@NotNull
@Max(value = 50,message = "年齡不能大於50")
private Integer ageMax;
@NotBlank
@Pattern( regexp = "/^[a-z0-9_-]{3,16}$/",message = "用戶名爲3-16位整數+英文")
private String loginName;


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Integer getAgeMax() {
return ageMax;
}

public void setAgeMax(Integer ageMax) {
this.ageMax = ageMax;
}

public String getLoginName() {
return loginName;
}

public void setLoginName(String loginName) {
this.loginName = loginName;
}

@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +

'}';
}
}
四、controller:緩存

/**
@Valid Emp e 被驗證的Bean前添加@Valid
BindingResult br 每一個被驗證對象後面都跟一個BindingResult對象,裏面持有錯誤返回信息。

*/
@RequestMapping("/hi2")
public ModelAndView sayHello2(@Valid Emp e ,BindingResult br){

ModelAndView mov = new ModelAndView("hello");
if(br.hasErrors()) {
System.out.println("校驗出錯");

/* FieldError fieldError= br.getFieldError();
System.out.println(fieldError.getDefaultMessage());*/
/* List<ObjectError> ls=br.getAllErrors();
for (int i = 0; i < ls.size(); i++) {
System.out.println("error:"+ls.get(i).getDefaultMessage());
}*/
List<FieldError> list = br.getFieldErrors();
for (FieldError fieldError2 : list) {
System.out.println("屬性名"+fieldError2.getField()+">>>"+fieldError2.getDefaultMessage());
//jsp展現用
mov.addObject(fieldError2.getField()+"Tip",fieldError2.getDefaultMessage());
}

}


return mov;
}mvc

 

五、jsp返回值:app

通常框架提供了標籤進行直接顯示統一返回數據,可是不夠靈活,因此我沒有看那種方式,我在controller中獲取到屬性以及報錯信息set進了ModelAndView對象,直接使用${屬性名Tip}進行取值便可。

六、註解詳解(摘抄,未找到原創博主,具體也能夠看官網):

@Valid 被註釋的元素是一個對象,須要檢查此對象的全部字段值@Null 被註釋的元素必須爲 null@NotNull 被註釋的元素必須不爲 null@AssertTrue 被註釋的元素必須爲 true@AssertFalse 被註釋的元素必須爲 false@Min(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值@Max(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值@DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值@DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值@Size(max, min) 被註釋的元素的大小必須在指定的範圍內@Digits (integer, fraction) 被註釋的元素必須是一個數字,其值必須在可接受的範圍內@Past 被註釋的元素必須是一個過去的日期@Future 被註釋的元素必須是一個未來的日期@Pattern(value) 被註釋的元素必須符合指定的正則表達式 2. Hibernate Validator 附加的 constraint註解 做用@Email 被註釋的元素必須是電子郵箱地址@Length(min=, max=) 被註釋的字符串的大小必須在指定的範圍內@NotEmpty 被註釋的字符串的必須非空@Range(min=, max=) 被註釋的元素必須在合適的範圍內@NotBlank 被註釋的字符串的必須非空@URL(protocol=,host=, port=, regexp=, flags=) 被註釋的字符串必須是一個有效的url@CreditCardNumber 被註釋的字符串必須經過Luhn校驗算法,銀行卡,信用卡等號碼通常都用Luhn計算合法性@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的實現@SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包 hibernate補充的註解中,最後3個不經常使用,可忽略。主要區分下@NotNull  @NotEmpty  @NotBlank 3個註解的區別:@NotNull           任何對象的value不能爲null@NotEmpty       集合對象的元素不爲0,即集合不爲空,也能夠用於字符串不爲null@NotBlank        只能用於字符串不爲null,而且字符串trim()之後length要大於0

相關文章
相關標籤/搜索