Springboot采用hibernate-validate验证请求参数
在springboot项目使用hibernate-validate对请求参数添加注解进行校验
常用注解
@Null
,标注的属性值必须为空
@NotNull
,标注的属性值不能为空
@AssertTrue
,标注的属性值必须为true
@AssertFalse
,标注的属性值必须为false
@Min
,标注的属性值不能小于min中指定的值
@Max
,标注的属性值不能大于max中指定的值
@DecimalMin
,小数值,同上
@DecimalMax
,小数值,同上
@Negative
,负数
@NegativeOrZero
,0或者负数
@Positive
,整数
@PositiveOrZero
,0或者整数
@Size
,指定字符串长度,注意是长度,有两个值,min以及max,用于指定最小以及最大长度
@Digits
,内容必须是数字
@Past
,时间必须是过去的时间
@PastOrPresent
,过去或者现在的时间
@Future
,将来的时间
@FutureOrPresent
,将来或者现在的时间
@Pattern
,用于指定一个正则表达式
@NotEmpty
,字符串内容非空
@NotBlank
,字符串内容非空且长度大于0
@Email
,邮箱
@Range
,用于指定数字,注意是数字的范围,有两个值,min以及max
使用方法
修改默认的验证策略
@Configuration
public class ValidatorConfig { @Bean
public Validator validator() {
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
//该配置的意思是,有一个验证失败就立刻返回,不用等到所有的都验证完
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return factory.getValidator();
}
}
异常捕获
@RestControllerAdvice
public class GlobalExceptionHandler { //这里处理@RequestBody ,验证不通过抛出的异常
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultInfo<?> validationErrorHandler(MethodArgumentNotValidException ex) {
List<String> errorInformation = ex.getBindingResult().getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
.collect(Collectors.toList());
return new ResultInfo<>(, errorInformation.get().toString(), null);
} //这里是处理 @PathVariable和@RequestParam 验证不通过抛出的异常
@ExceptionHandler(ConstraintViolationException.class)
public ResultInfo<?> validationErrorHandler(ConstraintViolationException ex) {
List<String> errorInformation = ex.getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList());
return new ResultInfo<>(, errorInformation.toString(), null);
}
}
controller层
@RestController
@RequestMapping("/users")
@Validated
public class UserController { @PostMapping("/addUser")
public User addUser(@Valid @RequestBody User user) {
// 仅测试验证过程,省略其他的逻辑
return user;
} @GetMapping("/{name}/detail")
public User getUserByName(
@NotNull
@Size(min = , max = , message = "用户名格式有误")
@PathVariable String name) {
User user = new User();
user.setName(name);
return user;
} @GetMapping("/getName/detail")
public User getUserByNameParam(
@NotNull
@Size(min = , max = , message = "用户名格式有误")
@RequestParam("name") String name) {
User user = new User();
user.setName(name);
return user;
}
}
github下载地址:https://github.com/jake1263/hibernate-validate
Springboot采用hibernate-validate验证请求参数的更多相关文章
- SpringBoot 拦截器获取http请求参数
SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 目录 SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 获取http请求参数是一种刚需 定义拦截器获取请求 为 ...
- 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果
/** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...
- hibernate-validator验证请求参数
开发接口要进行请求参数内容格式校验,比如在接收到请求参数后依次需要进行数据内容判空.数据格式规范校验等,十分麻烦,于是尝试用hibernate-validator进行参数校验,简单记录一下使用步骤: ...
- 如何在Asp.Net WebApi接口中,验证请求参数中是否携带token标识!
[BasicAuthentication] public abstract class ApiControllerBase : ApiController { #region Gloal Proper ...
- hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别
Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...
- spring 项目中使用 hibernate validator验证输入参数
1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...
- SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)
SpringBoot 基于web应用开发 一.Lombok使用 1.导入依赖库 <dependency> <groupId>org.projectlombok</g ...
- SpringBoot 全局处理以及注入请求参数
后端接口,经常会用token获取对应的账号信息.于是考虑将这个步骤封装起来. 之前项目使用ThreadLocal去做这样的事情,但昨天看SpringBoot的官方文档,发现借助框架的功能也可以做这样的 ...
- SpringBoot 全局异常处理 @RestControllerAdvice +@ExceptionHandler 请求参数校验
ControllerAdvice 指示带注释的类辅助“控制器”. 作为的特殊化@Component,允许通过类路径扫描自动检测实现类. 通常用于定义@ExceptionHandler, @InitBi ...
随机推荐
- 学习Spring-Data-Jpa(十三)---动态查询接口JpaSpecificationExecutor
1.JpaSpecificationExecutor JPA2引入了一个criteria API,我们可以使用它以编程的形式构建查询.通过编写criteria,动态生成query语句.JpaSpeci ...
- 查看.NET应用程序中的异常(下)
为什么要使用内存转储进行调试? 在两种主要情况下,您可能需要使用内存转储进行调试.第一种情况是应用程序有一个未处理的异常并崩溃,而您只有一个内存转储.第二种情况是,在生产环境中出现异常或特定行为,并且 ...
- CSS行内元素
一.典型代表 span a ,strong em del, ins 二.特点: 在一行上显示 不能直接设置宽高 元素的宽和高就是内容撑开的宽高. <style type="text/c ...
- 用pandas进行数据清洗(二)(Data Analysis Pandas Data Munging/Wrangling)
在<用pandas进行数据清洗(一)(Data Analysis Pandas Data Munging/Wrangling)>中,我们介绍了数据清洗经常用到的一些pandas命令. 接下 ...
- nodejs+nvm历史版本
官网:http://nodejs.org/dist/ 淘宝镜像:https://npm.taobao.org/mirrors/node/ nvm历史版本:https://github.com/core ...
- 洛谷P1902 刺杀大使
题目 二分加广搜 #include <bits/stdc++.h> using namespace std; int n, m, l, r, p[1001][1001], vis[1001 ...
- GoCN每日新闻(2019-10-02)
GoCN每日新闻(2019-10-02) GoCN每日新闻(2019-10-02) 1. Golang中基于Gin和Casbin的web使用方式 https://dev.to/maxwellhertz ...
- 「APIO2018」选圆圈
传送门 Description 有\(n\)个圆,每次找到这些圆中半径最大中的编号最小的圆,删除ta及与其有交集的所有圆. 对于每个圆,求出它是被哪一个圆删除的. Solution K-D Tree ...
- CTF SSTI(服务器模板注入)
目录 基础 一些姿势 1.config 2.self 3.[].() 3.url_for, g, request, namespace, lipsum, range, session, dict, g ...
- JAVA从服务器下载文件根据Url把多文件打包成ZIP下载
注意: 1. String filename = new String(“xx.zip”.getBytes(“UTF-8”), “ISO8859-1”);包装zip文件名不发生乱码. 2.一定要注意 ...