Springboot参数检验

这篇博客详细介绍了SpringBoot中的参数验证,包括常用注解、全局异常处理方法,如 BindException 和 MethodArgumentNotValidException 的区别,以及ConstraintViolationException的使用。还通过示例解释了无组操作和组处理的验证过程,强调了在Controller和Service层如何添加@Valid和@Validated注解来实现参数校验。
摘要由CSDN通过智能技术生成

一、常用注解

常用注解 说明 判断和示例
@NotNull 被注解元素不能为null if(obj != null)
@NotEmpty 被注解元素不能为null且长度不能为0 字符串:if(s != null && s.length() > 0) 集合:if(obj != null && obj.size() > 0)
@NotBlank 只能用于String类型,被注解元素不能为null且必须有非空格外的其它字符 if(s != null && s.trim().length() > 0)
@Length(min=low, max=high) 只能用于String类型,其长度min <= len <= max。按理说都有length了,肯定不能为null,但是测试不行,故必须与@NotNull等非空注解配合使用 if(s != null && s.length() >= min && s.length <= high)
@Size(min=low, max=high) 用于集合类型,其大小min <= size <= max。也必须配合非空注解使用 if(obj != null && obj.length() >= min && obj.length <= high)
@Max(max)@Min(min) 都只能用于Number类型或字符类型。@Max表示被注解元素的值不能超过设置的最大值max;@Min表示被注解的值不能小于min。也必须配合@NotNull注解使用 如设置vlanID,最大为4096
@Email 只用于String类型。需配合非空注解使用 默认的格式:a@b
@Pattern(regexp=正则表达式) 用于String类型,regexp设置正则,需配合非空注解使用 如校验IP

二、全局异常

0. 依赖管理

需引入依赖包hibernate-validator

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
</dependency>

1. BindException / MethodArgumentNotValidException

Controller中进行参数校验时抛出该异常。其中,不涉及组操作时,默认抛出BindException异常;涉及组操作时默认抛出MethodArgumentNotValidException异常,差别不大,新版本中MethodArgumentNotValidException继承于BindException,两个异常可以共用一个处理方法

2. ConstraintViolationException

Service中进行参数校验时抛出此异常,通过其getMessage()方法就可获取所有异常message

3. 代码实现

@RestControllerAdvice/@ControllerAdvice:全局异常处理注解,拦截所有异常统一处理。也是 @Component注解,两者的区别同@RestController/@Controller一样。

@ExceptionHandler:拦截指定异常并进行处理,同一个异常处理不能出现两次

@ResponseStatus:设置response的状态码,默认200 OK

@RestControllerAdvice
public class GlobalException {
   
    
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResultBack handleConstraintViolationException(ConstraintViolationException ex) {
   
        BasicLogUtil.info("ConstraintViolationException");

        return new ResultBack(ResultStatus.FAILED, ex.getMessage());
    }

    // BindException 和 MethodArgumentNotValidException 共用一个异常处理方法
    @ExceptionHandler({
   BindException.class, MethodArgumentNotValidException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值