1. 程式人生 > 其它 >spring mvc環境之validator表單驗證(十一)

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