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
标签:name,spring,age,校验,Validator,JSR,mvc,validator From: https://www.cnblogs.com/fps2tao/p/16976763.html