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. 中国十大IT技术社区,你都知道哪些?

    中国5大新型IT技术社区与5大传统IT技术社区,你都知道哪些? 社区是聚集一类具有相同爱好或者相同行业的群体,IT技术社区就是聚集了IT行业内的技术人,在技术社区可以了解到行业的最新进展,学习最前沿的 ...

  2. react 数据请求分层

    封装一个接口请求类 数据模型 请求uri配置设置 数据统一存储于redux中,在本项目中创建一个store目录,此目录中就是redux仓库源 定义仓库入口 reducer methods方法 acti ...

  3. Vector + ClickHouse 收集日志

    目前业界的日志生态,最常用的是 ELK,其次就是 ClickHouse,本文会演示如何使用 Vector + ClickHouse 来采集 Nginx 日志并做清洗,最终写入 ClickHouse.至 ...

  4. Flink状态(一)

    key状态和算子状态 key状态 key状态总是与key有关,只能被用于keyedStream类型的函数与算子.你可以认为key状态是一种被分区的算子状态,每一个key有一个状态分区.每一个key状态 ...

  5. Linux下Oracle11G数据备份恢复(RMAN)

    数据库安装参考步骤1--14 https://www.cnblogs.com/baixisuozai/p/17852235.html #rman数据库备份脚本 #!/bin/bash PATH=$PA ...

  6. Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数

    前言 今天来讲一下损失函数--交叉熵函数,什么是损失函数呢?大体就是真实与预测之间的差异,这个交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异 ...

  7. EEPROM、Flash有关知识

    存储器分为两大类:RAM(Random Access Memory,任意地址访问储存器)和ROM(Read-Only Memory,只读储存器). 发展历史 ROM Read-Only Memory, ...

  8. python基础-列表list [ ]

    列表的定义和操作 列表的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 支持 数据有序 是 使用场景 可修改.可重复的 一批数据记录场景 # 定义一个列表list ...

  9. .Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller

    .h2 { background-color: rgba(78, 110, 242, 1); color: rgba(255, 255, 255, 1); padding: 10px } 在.Net ...

  10. 浙江省赛决赛 misc2 蝎子

    Misc 2 tcp.stream eq 0 内得知是冰蝎3.0,key是e46023a69f8db309 <?php @error_reporting(0); session_start(); ...