1. 程式人生 > >Hibernate validation 的使用. Bean 自動校驗

Hibernate validation 的使用. Bean 自動校驗

以前弄過hibernate-validation的,可今天想用一下的時候發現某些東西自己又忘了,於是又重新整理了下,並做了點實驗:

首先是要加入下面兩個包

hibernate-validator-4.1.0.Final.jar
 validation-api-1.0.0.GA.jar

如果在驗證不通過的時候進行了新增、更新或刪除操作的時候,則會丟擲javax.validation.ConstraintViolationException異常

下面是測試用的類

Model2:

Java程式碼  

import javax.persistence.Entity;  

import javax.persistence.GeneratedValue;  

import javax.persistence.GenerationType;  

import javax.persistence.Id;  

import javax.persistence.ManyToOne;  

import javax.persistence.Table;  

import javax.persistence.TableGenerator;  

import javax.validation.Valid;  

import javax.validation.constraints.Max;  

import javax.validation.constraints.Min;  

import javax.validation.constraints.NotNull;  

import javax.validation.constraints.Size;  

import org.hibernate.validator.constraints.Email;  

import org.hibernate.validator.constraints.URL;  

@Entity

@Table(name="t_Model2")  

@TableGenerator(name="mytable",initialValue=1,allocationSize=1)  

public

class Model2 {  

    privateint id;  

    private String name;  

    private String address;  

    private String phoneNumber;  

    private String email;  

    privateint age;  

    private Model3 model3;  

    private String url;  

    @Id

    @GeneratedValue(generator="mytable",strategy=GenerationType.TABLE)  

    publicint getId() {  

        return id;  

    }  

    publicvoid setId(int id) {  

        this.id = id;  

    }  

    @NotNull(message="姓名不能為空!")  

    public String getName() {  

        return name;  

    }  

    publicvoid setName(String name) {  

        this.name = name;  

    }  

    @NotNull(message="地址不能為空!")  

    public String getAddress() {  

        return address;  

    }  

    publicvoid setAddress(String address) {  

        this.address = address;  

    }  

    @Size(max=11,min=11,message="長度只能為11位!")  

    public String getPhoneNumber() {  

        return phoneNumber;  

    }  

    publicvoid setPhoneNumber(String phoneNumber) {  

        this.phoneNumber = phoneNumber;  

    }  

    @Email(message="email地址無效!")  

    @NotNull(message="email地址不能為空!")  

    public String getEmail() {  

        return email;  

    }  

    publicvoid setEmail(String email) {  

        this.email = email;  

    }  

    @NotNull(message = "Model3不能為空!")  

    @Valid

    @ManyToOne

    public Model3 getModel3() {  

        return model3;  

    }  

    publicvoid setModel3(Model3 model3) {  

        this.model3 = model3;  

    }  

    @Min(value=18,message="必須年滿18歲!")  

    @Max(value=30,message="年齡不能大於30歲!")  

    publicint getAge() {  

        return age;  

    }  

    publicvoid setAge(int age) {  

        this.age = age;  

    }  

    @URL(message="無效的URL地址")  

    @NotNull(message = "URL不能為空!")  

    public String getUrl() {  

        return url;  

    }  

    publicvoid setUrl(String url) {  

        this.url = url;  

    }  

}  

 Model3:

Java程式碼  

import javax.persistence.Entity;  

import javax.persistence.GeneratedValue;  

import javax.persistence.Id;  

import javax.persistence.Table;  

import javax.validation.constraints.NotNull;  

@Entity

@Table(name="t_Model3")  

publicclass Model3 {  

    privateint id;  

    private String name;  

    @Id

    @GeneratedValue

    publicint getId() {  

        return id;  

    }  

    publicvoid setId(int id) {  

        this.id = id;  

    }  

    @NotNull(message="model3的名稱不能為空!")  

    public String getName() {  

        return name;  

    }  

    publicvoid setName(String name) {  

        this.name = name;  

    }  

}  

Test類:

Java程式碼  

import org.springframework.context.ApplicationContext;  

import com.tiantian.test.model.Model2;  

import com.tiantian.test.service.Model2Service;  

import com.tiantian.test20110430.util.Util;  

publicclass Test1 {  

    publicstaticvoid main(String args[]) {  

        ApplicationContext context = Util.getContext();  

        Model2Service service = context.getBean(Model2Service.class);  

        Model2 model = new Model2();  

        model.setName("hello");  

        model.setEmail("[email protected]");  

        model.setAddress("湖南長沙");  

        model.setPhoneNumber("15012345678");  

        String result = Util.validateModel(model);// 返回的驗證結果,驗證結果就是一個字串,如果有錯誤的話則該字串的長度大於0

        System.out.println(result);  

        if (result.length() == 0)// 驗證不通過的時候就不新增

            service.add(model);  

    }  

}  

 上面用到的Util類:

Java程式碼  

import java.util.Iterator;  

import java.util.Set;  

import javax.validation.ConstraintViolation;  

import javax.validation.Validation;  

import javax.validation.Validator;  

import org.springframework.context.ApplicationContext;  

import org.springframework.context.support.ClassPathXmlApplicationContext;  

publicclass Util {  

    privatestatic ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  

    publicstatic ApplicationContext getContext() {  

        return context;  

    }  

    publicstatic String validateModel(Object obj) {//驗證某一個物件

        StringBuffer buffer = new StringBuffer(64);//用於儲存驗證後的錯誤資訊

        Validator validator = Validation.buildDefaultValidatorFactory()  

                .getValidator();  

        Set<ConstraintViolation<Object>> constraintViolations = validator  

                .validate(obj);//驗證某個物件,,其實也可以只驗證其中的某一個屬性的

        Iterator<ConstraintViolation<Object>> iter = constraintViolations  

                .iterator();  

        while (iter.hasNext()) {  

            String message = iter.next().getMessage();  

            buffer.append(message);  

        }  

        return buffer.toString();  

    }  

}  

下面是一些主要的註解:

Java程式碼  

@AssertTrue//用於boolean欄位,該欄位只能為true

@AssertFalse//該欄位的值只能為false

@CreditCardNumber//對信用卡號進行一個大致的驗證

@DecimalMax//只能小於或等於該值

@DecimalMin//只能大於或等於該值

@Digits(integer=2,fraction=20)//檢查是否是一種數字的整數、分數,小數位數的數字。

@Email//檢查是否是一個有效的email地址

@Future//檢查該欄位的日期是否是屬於將來的日期

@Length(min=,max=)//檢查所屬的欄位的長度是否在min和max之間,只能用於字串

@Max//該欄位的值只能小於或等於該值

@Min//該欄位的值只能大於或等於該值

@NotNull//不能為null

@NotBlank//不能為空,檢查時會將空格忽略

@NotEmpty//不能為空,這裡的空是指空字串

@Null//檢查該欄位為空

@Past//檢查該欄位的日期是在過去

@Size(min=, max=)//檢查該欄位的size是否在min和max之間,可以是字串、陣列、集合、Map等

@URL(protocol=,host,port)//檢查是否是一個有效的URL,如果提供了protocol,host等,則該URL還需滿足提供的條件

@Valid//該註解只要用於欄位為一個包含其他物件的集合或map或陣列的欄位,或該欄位直接為一個其他物件的引用,

        //這樣在檢查當前物件的同時也會檢查該欄位所引用的物件

相關推薦

Hibernate validation 的使用. Bean 自動

以前弄過hibernate-validation的,可今天想用一下的時候發現某些東西自己又忘了,於是又重新整理了下,並做了點實驗: 首先是要加入下面兩個包 hibernate-validator-4.1.0.Final.jar  validation-api-1.0.0.GA.jar 如果在驗證不通過的時

JQuery中內容操作函數、validation表單

調用方法 scrip 註意 語言 rul asc javascrip 最前面插入 獲取 JQuery:內容體拼接(可以直接拼接元素節點和內容節點)   JQuery實現:     方案1:A.append(B); == B.appendTo(A);A的後面拼接B    

SSM-SpringMVC中利用hibernate-validator做後臺

執行環境idea2018.2+maven3.5.4+jdk1.8+tomact8.5.34 一、第一步:引入包 在pom.xml中新增包,maven即可自動下載  <!--資料驗證-->  <dependency>     &n

Hibernate Validator服務端

         Hibernate Validator 是 Bean Validation 的參考實現。Hibernate Validator 提供了 JSR 303 規範中所有內建 constraint(約束) 的實現,除此之外還有一些附加的 c

Spring Boot 使用hibernate validator進行引數

demo 實體類 public class UserBean { @NotBlank(message="使用者名稱不能為空") private String userName; @NotBlank(message="年齡不能為空") @P

如何配置程式碼自動功能

這裡你需要下載安裝 VScode編輯器: 下載安裝VScode編輯器 安裝eslint 和 preitter外掛 安裝完可以看到底部配置項內容: 修改eslint配置項 修改內容為:

使用Hibernate-Validator優雅的引數

文章目錄 何為Hibernate-Validator 1. Hibernate-Validator 最基本的使用 2. 更加靈活的運用 3. 自定義註解 4. 分組驗證

響應資料自動json格式

利用jmeter對beanshell的支援 下載json.jar  響應資料,自動校驗json格式 beanshell後置處理器,加上 import org.json.*; String s2=new String(prev.getResponseData()

ABP原始碼分析十七:DTO 自動的實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用

一個十分詭異的Hibernate Mapping檔案XML錯誤

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge

解決jQuery-validation框架remote只能返回true、false問題

jQuery.extend( jQuery.validator.methods, { // http://jqueryvalidation.org/remote-method/ remote: function( value, element, param ) { if (

vue整合vee-validate自動

官方文件:https://baianat.github.io/vee-validate/guide/cdn:https://cdn.jsdelivr.net/npm/[email protected]/dist/vee-validate.js中文包:https://

利用反射打造自定義註解,自動或處理資料

    開發過程中,難免會對資料進行校驗或處理,難道每次都對不同的實體類的屬性挨個判斷是否符合規範或者對其進行特殊處理,程式設計師不應該這麼做。在這個時候,自定義註解就派上大用場了。比如自定義一個 @Email 註解,將其標註在只能存放email格式的屬性(private

JAVA引數驗證 Validation(二)分組&自定義

有些時候一個物件會在多個場景使用,不同場景對該物件中的引數校驗需求不同,即有些場景不對引數進行校驗。 比如註冊時,我們要填寫出生日期引數,但是登入時並不需要該引數 這裡可以用到校驗分組groups public class User implement

輸入6位驗證碼 自動

maxlength fix pad rop -- 完成 absolute 提交 idt css樣式 <style> .yxsc_6numYzmFa{position: fixed;width: 100%;height: 100%;bac

使用Spring Validation優雅地引數

> 寫得好的沒我寫得全,寫得全的沒我寫得好 ## 引言 不知道大家平時的業務開發過程中 controller 層的引數校驗都是怎麼寫的?是否也存在下面這樣的直接判斷? ```java public String add(UserVO userVO) { if(userVO.getAge() ==

使用hibernate validate做引數

#### 1.為什麼使用hibernate validate ​ 在開發http介面的時候,引數校驗是必須有的一個環節,當引數校驗較少的時候,一般是直接按照校驗條件做校驗,校驗不通過,返回錯誤資訊。比如以下校驗使用者名稱不為空的校驗: ``` if (userName == null || "".equa

hibernate框架validation 和 HttpMessageConverter的配置方式

hibernate的校驗框架validation 和 httpmessageconverter的配置方式hibernate的校驗框架validation 和 HttpMessageConverter的配置方式好像是2個不相幹的配置內容,但他們都用到了<mvc:annotation-driven />

框架hibernate validation

1.比較 @Valid是使用hibernate validation的時候使用 @Validated 是隻用spring  Validator 校驗機制使用\ 2.實現 其中,@valid,java的jsr303聲明瞭這類介面,hib

Java Bean Validation 引數

引數校驗是我們程式開發中必不可少的過程。使用者在前端頁面上填寫表單時,前端js程式會校驗引數的合法性,當資料到了後端,為了防止惡意操作,保持程式的健壯性,後端同樣需要對資料進行校驗。後端引數校驗最簡單的做法是直接在業務方法裡面進行判斷,當判斷成功之後再繼續往下執行。但這樣帶給我們的是程式碼的耦合,冗