在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验证请求参数的更多相关文章

  1. SpringBoot 拦截器获取http请求参数

    SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 目录 SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 获取http请求参数是一种刚需 定义拦截器获取请求 为 ...

  2. 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果

    /** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...

  3. hibernate-validator验证请求参数

    开发接口要进行请求参数内容格式校验,比如在接收到请求参数后依次需要进行数据内容判空.数据格式规范校验等,十分麻烦,于是尝试用hibernate-validator进行参数校验,简单记录一下使用步骤: ...

  4. 如何在Asp.Net WebApi接口中,验证请求参数中是否携带token标识!

    [BasicAuthentication] public abstract class ApiControllerBase : ApiController { #region Gloal Proper ...

  5. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  6. spring 项目中使用 hibernate validator验证输入参数

    1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...

  7. SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)

    SpringBoot 基于web应用开发 一.Lombok使用 1.导入依赖库 <dependency>    <groupId>org.projectlombok</g ...

  8. SpringBoot 全局处理以及注入请求参数

    后端接口,经常会用token获取对应的账号信息.于是考虑将这个步骤封装起来. 之前项目使用ThreadLocal去做这样的事情,但昨天看SpringBoot的官方文档,发现借助框架的功能也可以做这样的 ...

  9. SpringBoot 全局异常处理 @RestControllerAdvice +@ExceptionHandler 请求参数校验

    ControllerAdvice 指示带注释的类辅助“控制器”. 作为的特殊化@Component,允许通过类路径扫描自动检测实现类. 通常用于定义@ExceptionHandler, @InitBi ...

随机推荐

  1. volatile原理

    内存可见性 内存可见性相关概念:线程对共享变量修改的可见性.当一个线程修改了共享变量的值,其他线程能够立刻得知这个修改. 后面会继续总结一篇<Java内存模型(JMM)总结>以详细描述内存 ...

  2. 003-转载-keil-STM32硬件错误HardFault_Handler的处理方法

    (一)参考文献:https://blog.csdn.net/electrocrazy/article/details/78173558 在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真 ...

  3. js 鼠标事件详细

    常用的几个类型 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick HT ...

  4. WinDbg常用命令系列---.effmach

    .effmach (Effective Machine) .effmach命令显示或更改调试器使用的处理器模式. .effmach [MachineType] 参数: MachineType指定调试器 ...

  5. 【数据结构】Java版

    有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 想你吴亦凡;赵丽颖 - 想你 你是程序猿对吗?会写代码的那种? 我是打字猿?会打代码的那种? 现在告诉大家一个很 ...

  6. Go字符串常用处理

    应用到strings包 /** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/ ...

  7. mysql 分组和排序

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

  8. element ui 合计/table show-summary

    在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...

  9. 后退欧拉法求解常微分方程(c++)

    #include<iostream> #include<iomanip> using namespace std; int main() { double x,y,yn,h,t ...

  10. Jquery创建动态表单

    $(document).ready(function(){ $("#button1").click(function(){ //获取html <body></bo ...