spring mvc環境之validator表單驗證(十一)
JSR 303、JSR 349與Bean Validator
籠統來說,就是Java規定了一套關於驗證器的API,規範先後發了兩版,就是所謂的JSR 303與JSR 349。然後提出了基於規範的實現:Bean Validator。JSR 303是最早的,其對應了Bean Validator 1.0的版本,比較菜,然後後來擴充套件了JSR 349,提出了依賴注入、註解等內容,稱為了Bean Validator。
關於Bean Validator,這並不是一項技術,也算是一種規範,需要對其實現。而Hibernate Validator就是其中一種對規範的實現,是JSR303的擴充套件。因為Spring MVC本身不提供validator的,所以我們需要其他的代替.
-----------------------------------------
資料校驗原理:
spring MVC規定要實現資料校驗必須實現ValidatorFactory介面,但是這個介面的實現類springMVC已經為我們寫好了LocalValidatorFactoryBean。也就是說只要把這個類讓spring管理上後,我們就可以用對應的註解去驗證了。那怎樣管理(配置)呢?
spring mvc 配置:
<mvc:annotation-driven validator="validator"/> <!-- 以下 validator ConversionService 在使用 mvc:annotation-driven 會 自動註冊--> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> </bean>
意思是隻需要配置一個 <mvc:annotation-driven/>即可.
------------------------------------------------------
資料校驗步驟:
1.引入對應的jar包
2.springMVC配置,和校驗的寫法
3.驗證一下
==========================
1.引入相應的依賴
<!-- 驗證器所需的包 --> <dependency> <groupId>com.fasterxml</groupId> <artifactId>classmate</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.3.2.Final</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency>
其實可以值引用後兩個,後面兩個依賴前兩個,會自動加入進來
2.校驗類的配置 (有可能已經配置了)
<mvc:annotation-driven />
在控制器裡面校驗引數時:(規定控制器需要驗證的物件,後面跟形參BindingResult bindingResult會自動記錄校驗結果).
3.驗證一下
1)前端表單
資料的驗證 <form action="./index/index07" method="get" > id:<input type="text" name="users.id" /> name:<input type="text" name="users.name" /> age:<input type="text" name="users.age" /> <input type="submit" value="submit" /> </form>
2)實體寫法
import lombok.Data;
import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotEmpty; import java.io.Serializable; @Data public class UserEntity implements Serializable { private int id; @NotEmpty(message = "姓名不能為空") private String name; @Range(min = 1,max = 120) private int age; public UserEntity() { } public UserEntity(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } }
3)控制器寫法
@RequestMapping("index07") public ModelAndView index07(@Valid @ModelAttribute("user") UserEntity user, BindingResult bindingResult){ /* 測試一下資料校驗 */ System.out.println(user); System.out.println(bindingResult.getFieldError("name").getDefaultMessage()); System.out.println(bindingResult.getFieldError("age").getDefaultMessage()); ModelAndView mv = new ModelAndView(); mv.setViewName("index01"); return mv; }
參:https://www.cnblogs.com/fps2tao/p/13784169.html
https://www.cnblogs.com/fps2tao/p/13784283.html
https://www.cnblogs.com/hellowhy/p/9750026.html