4.4 数据验证
第4章 Web开发
4.1 Web开发简介
4.2 URL映射
4.3 参数传递
4.4 数据验证
4.5 拦截器
4.6 过滤器
4.7 Web配置
4.8 实战:实现优雅的数据返回
4.4 数据验证
4.4.1 Hibernate Validator简介
数据校验是Web开发中的重要部分,也是必须要考虑和面对的事情。
目前数据校验的规范、组件非常多,有 JSR-303/JSR-349、Hibernate Validator、Spring Validation。
它们之间的关系如下:
JSR(Java Specification Requests) 定义了数据验证规范,而 Hibernate Validator 则是基于 JSR 规范,实现了各种数据验证的注解以及一些附加的约束注解。Spring Validation 则是对 Hibernate Validator 的封装整合。
Spring Boot 是从 Spring 发展而来的,所以自然支持 Hibernate Validator 和 Spring Validation 两种方式,默认使用的是 Hibernate Validator 组件。
4.4.2 数据校验
使用 Hibernate Validator 校验数据需要定义一个接收的数据模型,使用注解的形式描述字段校验的规则。
下面以 UserValidator 对象为例演示如何使用 Hibernate Validator 校验数据。
引入Hibernate Validator依赖包,如下:
<!--数据验证-->
<!--方式1:引入 Hibernate Validator-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<!--方式2:引入 spring-boot-starter-validation-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-validation</artifactId>-->
<!-- </dependency>-->
1、JavaBean 参数校验
Post 请求较参数较多时,可以在对应的数据模型(Java Bean)中进行数据校验,通过注解来指定字段的校验规则。
首先,创建 Java Bean 实体类:
UserValidator.java
package com.example.webproject.model;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
public class UserValidator {
@NotBlank(message = "姓名不允许为空!")
@Length(min = 2, max = 10, message = "姓名长度错误,姓名长度2-10!")
private String name;
@NotNull(message = "年龄不能为空!")
@Min(18)
private int age;
@NotBlank(message = "地址不能为空!")
private String address;
@Pattern(regexp = "^((13[0-9])|(14[5,7,9])|(15[0-3]|[5-9])|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))//d{8}$",
message = "手机号格式错误")
private String phone;
@Email(message = "邮箱格式错误")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
然后,添加数据校验方法:
UserValidatorController.java
package com.example.webproject.controller;
import com.example.webproject.model.UserValidator;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequestMapping("/userValidator")
public class UserValidatorController {
@PostMapping(path = "/check")
public String check(@RequestBody @Valid UserValidator userValidator, BindingResult result) {
String name = userValidator.getName();
if(result.hasErrors()) {
List<ObjectError> list = result.getAllErrors(
还没有评论,来说两句吧...