4.4 数据验证

雨点打透心脏的1/2处 2023-10-07 23:27 191阅读 0赞

第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. <!--数据验证-->
  2. <!--方式1:引入 Hibernate Validator-->
  3. <dependency>
  4. <groupId>org.hibernate.validator</groupId>
  5. <artifactId>hibernate-validator</artifactId>
  6. </dependency>
  7. <!--方式2:引入 spring-boot-starter-validation-->
  8. <!-- <dependency>-->
  9. <!-- <groupId>org.springframework.boot</groupId>-->
  10. <!-- <artifactId>spring-boot-starter-validation</artifactId>-->
  11. <!-- </dependency>-->
1、JavaBean 参数校验

Post 请求较参数较多时,可以在对应的数据模型(Java Bean)中进行数据校验,通过注解来指定字段的校验规则。

首先,创建 Java Bean 实体类:

UserValidator.java

  1. package com.example.webproject.model;
  2. import org.hibernate.validator.constraints.Length;
  3. import javax.validation.constraints.*;
  4. public class UserValidator {
  5. @NotBlank(message = "姓名不允许为空!")
  6. @Length(min = 2, max = 10, message = "姓名长度错误,姓名长度2-10!")
  7. private String name;
  8. @NotNull(message = "年龄不能为空!")
  9. @Min(18)
  10. private int age;
  11. @NotBlank(message = "地址不能为空!")
  12. private String address;
  13. @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}$",
  14. message = "手机号格式错误")
  15. private String phone;
  16. @Email(message = "邮箱格式错误")
  17. private String email;
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public int getAge() {
  25. return age;
  26. }
  27. public void setAge(int age) {
  28. this.age = age;
  29. }
  30. public String getAddress() {
  31. return address;
  32. }
  33. public void setAddress(String address) {
  34. this.address = address;
  35. }
  36. public String getPhone() {
  37. return phone;
  38. }
  39. public void setPhone(String phone) {
  40. this.phone = phone;
  41. }
  42. public String getEmail() {
  43. return email;
  44. }
  45. public void setEmail(String email) {
  46. this.email = email;
  47. }
  48. }

然后,添加数据校验方法:

UserValidatorController.java

  1. package com.example.webproject.controller;
  2. import com.example.webproject.model.UserValidator;
  3. import org.springframework.validation.BindingResult;
  4. import org.springframework.validation.ObjectError;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RequestBody;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import javax.validation.Valid;
  10. import java.util.List;
  11. @RestController
  12. @RequestMapping("/userValidator")
  13. public class UserValidatorController {
  14. @PostMapping(path = "/check")
  15. public String check(@RequestBody @Valid UserValidator userValidator, BindingResult result) {
  16. String name = userValidator.getName();
  17. if(result.hasErrors()) {
  18. List<ObjectError> list = result.getAllErrors(

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读

    相关 44、Map

    ![8e3889229aa7495db39451d2d61e5c01.png][] 一、基本介绍: 1、Map接口实现类的特点[很实用] 注意:这里讲的是JDK8的Map

    相关 Excel数据验证

    假设我们在第一列数据中,需要键入性别的限制是“男”或者“女”。选中限制的单元格。点击【数据】-【数据工具】-【数据验证】 ![watermark_type_ZmFuZ3poZ

    相关 44. 通配符匹配

    给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘\’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘\’ 可以匹配任意字符串(包括空字符串)

    相关 props数据验证

    如果需要在子组件接收父组件数据时,对数据进行一些验证,需要用到props验证。在子组件接收父组件传递的数据,要用对象的方式,在对象中可以设置相应的验证规则。 1.数据类型验

    相关 SpringMVC:数据验证

    数据验证在实际应用中非常广泛,例如我们注册个用户信息,填写用户名,提示至少6位...... 数据验证是用户输入的数据值进行的业务逻辑有效性验证,而非数据类型的验证,数据类型的