Spring Boot 整合Hibernate Validator

依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-test</artifactId>
  9. <scope>test</scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-web</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.hibernate.validator</groupId>
  17. <artifactId>hibernate-validator</artifactId>
  18. <version>6.2.0.Final</version>
  19. </dependency>
  20. </dependencies>

controller

  • 记得添加 @Validated
  1. @RestController
  2. @Validated
  3. public class TestController {
  4. @PostMapping("/valid")
  5. public String validator(@NotBlank(message = "{required}") String name,
  6. @Email(message = "{invalid}") String email){
  7. return "success--->普通传参";
  8. }
  9. @PostMapping("test2")
  10. public String user(@Valid User user) {
  11. return "success---->对象";
  12. }
  13. }

entity

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. public class User implements Serializable {
  5. private static final long serialVersionUID = -2731598327208972274L;
  6. @NotBlank(message = "{required}")
  7. private String name;
  8. @Email(message = "{invalid}")
  9. private String email;
  10. }

ValidationMessages.properties 配置 message 的参数

全局异常处理

  • 未添加异常时

  • 添加全局异常

代码

  • 里面的 @Order(value = Ordered.HIGHEST_PRECEDENCE) 参数越小,优先级越高
  1. import org.apache.commons.lang3.StringUtils;
  2. import org.springframework.core.Ordered;
  3. import org.springframework.core.annotation.Order;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.validation.BindException;
  6. import org.springframework.validation.FieldError;
  7. import org.springframework.web.bind.annotation.ExceptionHandler;
  8. import org.springframework.web.bind.annotation.ResponseStatus;
  9. import org.springframework.web.bind.annotation.RestControllerAdvice;
  10. import javax.validation.ConstraintViolation;
  11. import javax.validation.ConstraintViolationException;
  12. import javax.validation.Path;
  13. import java.util.List;
  14. import java.util.Set;
  15. @RestControllerAdvice
  16. @Order(value = Ordered.HIGHEST_PRECEDENCE)
  17. public class GlobalExceptionHandler {
  18. /**
  19. * 统一处理请求参数校验(普通传参)
  20. */
  21. @ExceptionHandler(ConstraintViolationException.class)
  22. @ResponseStatus(HttpStatus.BAD_REQUEST)
  23. public String handleConstraintViolationException(ConstraintViolationException e) {
  24. StringBuilder message = new StringBuilder();
  25. Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
  26. for (ConstraintViolation<?> violation : violations) {
  27. Path path = violation.getPropertyPath();
  28. String[] pathArr = StringUtils.splitByWholeSeparatorPreserveAllTokens(path.toString(), ".");
  29. message.append(pathArr[1]).append(violation.getMessage()).append(",");
  30. }
  31. message = new StringBuilder(message.substring(0, message.length() - 1));
  32. return message.toString();
  33. }
  34. /**
  35. * 统一处理请求参数校验(实体对象传参)
  36. */
  37. @ExceptionHandler(BindException.class)
  38. @ResponseStatus(HttpStatus.BAD_REQUEST)
  39. public String validExceptionHandler(BindException e) {
  40. StringBuilder message = new StringBuilder();
  41. List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
  42. for (FieldError error : fieldErrors) {
  43. message.append(error.getField()).append(error.getDefaultMessage()).append(",");
  44. }
  45. message = new StringBuilder(message.substring(0, message.length() - 1));
  46. return message.toString();
  47. }
  48. }

其他注解的使用

  • Bean Validation 中内置的 constraint
  1. @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值
  2. @Null 被注释的元素必须为 null
  3. @NotNull 被注释的元素必须不为 null
  4. @AssertTrue 被注释的元素必须为 true
  5. @AssertFalse 被注释的元素必须为 false
  6. @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  7. @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  8. @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  9. @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  10. @Size(max, min) 被注释的元素的大小必须在指定的范围内
  11. @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
  12. @Past 被注释的元素必须是一个过去的日期
  13. @Future 被注释的元素必须是一个将来的日期
  14. @Pattern(value) 被注释的元素必须符合指定的正则表达式
  • Hibernate Validator 附加的 constraint
  1. @Email 被注释的元素必须是电子邮箱地址
  2. @Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
  3. @NotEmpty 被注释的字符串的必须非空
  4. @Range(min=, max=) 被注释的元素必须在合适的范围内
  5. @NotBlank 被注释的字符串的必须非空
  6. @URL(protocol=,
  7. host=, port=,
  8. regexp=, flags=) 被注释的字符串必须是一个有效的url
  9. @CreditCardNumber
  10. 被注释的字符串必须通过Luhn校验算法,
  11. 银行卡,信用卡等号码一般都用Luhn
  12. 计算合法性
  13. @ScriptAssert
  14. (lang=, script=, alias=) 要有Java Scripting API JSR 223
  15. (“Scripting for the JavaTM Platform”)的实现
  16. @SafeHtml
  17. (whitelistType=,
  18. additionalTags=) classpath中要有jsoup
  19. hibernate补充的注解中,最后3个不常用,可忽略。
  20. 主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:
  21. @NotNull 任何对象的value不能为null
  22. @NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
  23. @NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0

Spring Boot 整合Hibernate Validator的更多相关文章

  1. spring boot 使用hibernate validator 验证service

    不在controller中验证,而是在service中验证. spring boot 默认使用的就是hibernate validator,存在于pom的spring-boot-starter-web ...

  2. Spring Boot集成Hibernate Validator

    废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...

  3. Spring Boot 整合 Hibernate5

    Run java -jar -Dspring.profiles.active=dev sport.web.services.jar Maven <parent> <groupId&g ...

  4. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  5. Spring Boot初识(2)- Spring Boot整合Mybaties

    一.本文介绍 首先读这篇文章之前如果没有接触过Spring Boot可以看一下之前的文章,并且读这篇文章还需要你至少能写基本的sql语句.我在写这篇文章之前也想过到底是选择JPA还是Mybaties作 ...

  6. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  7. spring boot整合slf4j-log日志

    原文地址:https://blog.csdn.net/u011271894/article/details/75735915 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  8. Spring Boot整合JPA、Redis和Swagger2

    好久没有总结了,最近也一直在学习.今天就把spring boot与其它技术的整合做个小总结,主要是jpa.redis和swagger2.公司里有用到这些,整合起来也很简单. 首先,新建一个Spring ...

  9. Spring Boot 整合 JPA 使用多个数据源

    介绍 JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的标准规范,Hibernate 是持久化规范的技术实现,而 Spring Data JPA 是在 ...

随机推荐

  1. svn :不能打开文件“/data/svn/repo/format”: 权限不够

    解决方法:关闭selinux vi /etc/sysconfig/selinux 将其中的SELINUX=enforcing 改为SELINUX=disabled  即可.

  2. 面试突击62:group by 有哪些注意事项?

    注意:本文以下内容基于 MySQL 5.7 InnoDB 数据库引擎. 1.group by 后面不能加 where 在 MySQL 中,所有的 SQL 查询语法要遵循以下语法顺序: select f ...

  3. 【炼丹Trick】EMA的原理与实现

    在进行深度学习训练时,同一模型往往可以训练出不同的效果,这就是炼丹这件事的玄学所在.使用一些trick能够让你更容易追上目前SOTA的效果,一些流行的开源代码中已经集成了不少trick,值得学习一番. ...

  4. HMS Core图形图像技术展现最新功能和应用场景,加速构建数智生活

    [2022年7月15日,杭州]HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕.在数字经济不断发展的今天,开发者对图形图像的开发需求更加深入和多样化,从虚拟环境重构到 ...

  5. js基础学习-正则表达式

    正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 定义的方法: var patt = new RegExp(pattern, modifiers) // var patt ...

  6. RabbitMQ细说之开篇

    前言 关于消息中间件的应用场景,小伙伴们应该都耳熟能详了吧,比如经常提到的削峰填谷.分布式事务.异步业务处理.大数据分析等等,分布式消息队列成为其中比较关键的桥梁,也就意味着小伙伴们得掌握相关技能:当 ...

  7. 2499-springboot使用jar形式打包在linux上运行

    由于maven使用的种种问题,以前springboot版本变化较快带来的一些不兼容问题,是否考虑下使用jar形式运行web程序,而不是固守于war包与tomcat: 主要原理有两点: 使用nohup来 ...

  8. MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...

  9. composer常用命令(部分摘抄)

    1. 仅更新单个库 composer update foo/bar 2. 不编辑composer.json的情况下安装库 composer require "foo/bar:1.0.0&qu ...

  10. 技术分享|sysbench 压测工具用法浅析

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天简单介绍下sysbench的用法: 1.s ...