JSR303也称为bean validation,定义了一套bean验证规范。通过注解的方式关联属性与规则

使用方式

1.引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.常用注解

  • @Null:验证对象是否为null。
  • @NotNull:验证对象是否不为null,但无法检查长度为0的字符串。
  • @NotBlank:检查约束字符串是否不为Null且被Trim后的长度大于0,只对字符串有效,且会去掉前后空格。
  • @NotEmpty:检查约束元素是否为NULL或者是EMPTY。
  • @AssertTrue@AssertFalse:分别验证Boolean对象是否为true或false。
  • @Size(min=, max=)@Length(min=, max=):验证对象(如Array, Collection, Map, String)的长度或字符串的长度是否在给定范围之内。
  • @Past@Future:验证Date和Calendar对象是否在当前时间之前或之后。
  • @Pattern:验证String对象是否符合正则表达式的规则。

3.在bean的成员变量上引用注解。

4.抛出的方法为MethodArgumentNotValidException,因此需要在统一抛出异常时将其加入@controlleradvice

   @ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){ BindingResult bindingResult = e.getBindingResult();
List<String>errList=new ArrayList<>(); bindingResult.getFieldErrors().forEach(item->{
errList.add(item.getDefaultMessage());
});
String errors = StringUtils.join(errList, ",");
log.error("系统异常{}",errors); return new RestErrorResponse(errors);
}

5.在controller中对相应的参数引入注解@Validated

6.如果我的新增和更新的时候同时使用了一个bean,但是他们的验证要求不一样,我该怎么做:

JSR303提供了分组校验的方法,

  • 首先定义分组接口
public class ValidationGroups {
public interface Insert{};
public interface Delete{};
public interface Update{};
}
  • 成员变量上的注解需要额外添加group变量来标注当前注解具体属于哪一分组
    @NotEmpty(message = "新增课程名称不能为空",groups = {ValidationGroups.Insert.class})
@NotEmpty(message = "修改课程名称不能为空",groups = {ValidationGroups.Update.class})
@ApiModelProperty(value = "课程名称", required = true)
private String name;
  • 在@Validated中表明当前使用的是哪一种接口方案
@RequestBody @Validated(ValidationGroups.Insert.class) AddCourseDto addCourseDto

JSR303统一校验使用的更多相关文章

  1. YAML语法使用,JSR303数据校验

    YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...

  2. 【spring】-- jsr303参数校验器

    一.为什么要进行参数校验? 当我们在服务端控制器接受前台数据时,肯定首先要对数据进行参数验证,判断参数是否为空?是否为电话号码?是否为邮箱格式?等等. 这里有个问题要注意: 前端代码一般上会对这些数据 ...

  3. SpringMVC 使用JSR-303进行校验 @Valid

    注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...

  4. [SpringBoot] - 配置文件的多种形式及JSR303数据校验

    Springboot配置文件: application.yml   application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...

  5. spring boot 输入参数统一校验

    1 引入spring boot validate    maven 依赖 <!-- 验证 --> <dependency> <groupId>org.hiberna ...

  6. 转:使用JSR-303进行校验 @Valid

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  7. JSR303后端校验(一)

    JSR303后端校验(一) (1)在pom文件中添加依赖 <!-- JSR303后端校验 --> <dependency> <groupId>org.hiberna ...

  8. Springboot:JSR303数据校验(五)

    @Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...

  9. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  10. SpringBoot 使用 JSR303 自定义校验注解

    JSR303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator,有了它,我们可以在实体类的字段上标注不同的注解实现对数 ...

随机推荐

  1. vsftp配置使用

    vsftp简介: VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSFT ...

  2. Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

    引言 在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战.Easysearch 具备多种压缩模式,各有千秋.本文将重点探讨一种特别的压缩模式:zstd + source ...

  3. JAVA IDEA Maven 加速镜像 阿里云

    JAVA IDEA Maven 加速镜像 阿里云 如果是IDEA自带的则在: C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 20 ...

  4. invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法

    nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...

  5. idea 中的 jrebel

    1.打开idea设置 ,下载 jrebel 2搜索下载jrebel 3.重启之后,在右下角有个弹窗,这时候选择enable,然后右边的侧边栏工具会弹出一个界面,总共应该有4步,第一步是展开的,点击蓝色 ...

  6. Kafka多维度调优

    优化金字塔 应用程序层面 框架层面(Broker层面) JVM层面 操作系统层面 应用程序层面:应当优化业务代码合理使用kafka,合理规划主题,合理规划分区,合理设计数据结构: 框架层面:在不改动源 ...

  7. 计算机网络实验一:vlan的创建与划分

    这个是 pkt文件 有两道题 所以我是两个文件 https://pan.quark.cn/s/d4170897cb59 https://pan.quark.cn/s/da48878c77f5 发现 复 ...

  8. java8 Lambda及Stream学习笔记

    Lambda表达式Lambda 表达式可以替代只有一个抽象函数的接口实现. Lambda表达式同时还提升了对集合.框架的迭代.遍历.过滤数据的操作. Lambda表达式使用场景任何有函数式接口的地方 ...

  9. 一文了解Spark引擎的优势及应用场景

    Spark引擎诞生的背景 Spark的发展历程可以追溯到2009年,由加州大学伯克利分校的AMPLab研究团队发起.成为Apache软件基金会的孵化项目后,于2012年发布了第一个稳定版本. 以下是S ...

  10. FTP传输PORT、PASV模式

    FTP FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件.相比于HTTP,FTP协议要复杂得多.复杂的原因,是因为FTP协议要用到两个TCP ...