JSR303统一校验使用
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统一校验使用的更多相关文章
- YAML语法使用,JSR303数据校验
YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...
- 【spring】-- jsr303参数校验器
一.为什么要进行参数校验? 当我们在服务端控制器接受前台数据时,肯定首先要对数据进行参数验证,判断参数是否为空?是否为电话号码?是否为邮箱格式?等等. 这里有个问题要注意: 前端代码一般上会对这些数据 ...
- SpringMVC 使用JSR-303进行校验 @Valid
注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- spring boot 输入参数统一校验
1 引入spring boot validate maven 依赖 <!-- 验证 --> <dependency> <groupId>org.hiberna ...
- 转:使用JSR-303进行校验 @Valid
一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...
- JSR303后端校验(一)
JSR303后端校验(一) (1)在pom文件中添加依赖 <!-- JSR303后端校验 --> <dependency> <groupId>org.hiberna ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- springboot配置(yami配置文件,JSR303数据校验,多环境配置)
yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...
- SpringBoot 使用 JSR303 自定义校验注解
JSR303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator,有了它,我们可以在实体类的字段上标注不同的注解实现对数 ...
随机推荐
- Android 12(S) MultiMedia(十二)MediaCodecList & IOmxStore
这节来了解下MediaCodecList相关代码路径: frameworks/av/media/libstagefright/MediaCodecList.cpp frameworks/av/medi ...
- windows下IPv6组播(C++、MFC)
Server #include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #pragma comm ...
- OOP第一阶段题集总结
一.前言 知识点:数组,字符串的使用,链表,hashmap,泛型的使用,正则表达式的使用,类的设计,类与类之间的关系,单一职责. 题量:题目数量为5+4+3,数量适中,其中都是前几题较简单,最后一题较 ...
- Spring源码——@Component,@Service是如何被解析?
引言 在Spring中,Component.Service是在工作中经常被使用到的注解,为了加深对Spring运行机制的理解,今天我们一起来看一下Spring中对Component等注解的处理方式 C ...
- Spring扩展——BeanFactory和FactoryBean
BeanFactory和FactoryBean BeanFactory和FactoryBean长得很相似,也很容易让我们产生误解,特别是对于初学者而言,搞懂他俩关系非常有必要,因为这两个接口,是Spr ...
- RAS非对称加解密-RAS加解密和签名和验签,密钥生成器(java代码)
RAS非对称加解密-RAS加解密和签名和验签,密钥生成器(java代码)RSA 算法是一种非对称加解密算法.服务方生成一对 RSA 密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行 ...
- Windows查看电源使用情况
这里使用Windows自带的东西查看电源使用情况. 1.按Win键+R,输入cmd,回车. 2.输入Powercfg /batteryreport回车. 3.根据提示找到电池报告文件,双击打开即可.
- 英特尔 Gaudi 加速辅助生成
随着模型规模的增长,生成式人工智能的实现需要大量的推理资源.这不仅增加了每次生成的成本,而且还增加了用于满足此类请求的功耗.因此,文本生成的推理优化对于降低延迟.基础设施成本以及功耗都至关重要,其可以 ...
- Ubuntu 使用 SVN 管理 项目
背景 公司的项目需要在 Linux 环境进行开发,而都是使用 SVN 进行管理的.习惯了 SVN-GUI 的我,需要学习 SVN 的命令行. 准备 安装 SVN sudo apt-get apt-ge ...
- 【Hadoop报错】The directory item limit is exceeded: limit=1048576 items=1048576
问题描述: 调度系统执行hive任务失败,一直执行失败,报错如下: java.io.IOException: java.net.ConnectException: Call From #HostNam ...