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.jianshu.com/p/05c90d0fb8a1

https://www.cnblogs.com/fps2tao/p/13784169.html

https://www.cnblogs.com/fps2tao/p/13784283.html

https://www.cnblogs.com/hellowhy/p/9750026.html

 

posted @ 2022-12-12 17:48  与f  阅读(165)  评论(0)    收藏  举报