SpringBoot利用validation做参数校验

我们在设计后端API接口的时候,对于前端传输的参数通常是要进行校验的,以保证接口能正确处理数据。

我们可以在代码中,通过if进行条件检测,然后根据检测结果来处理数据

比如这样

        if (account == null) {
            throw new Exception("用户名称不能为空");
        }

但是依赖需要验证的代码会很多很杂,写起来也不优雅,所以我们选择用validation库来帮助我们进行字段的校验。

如何使用

第一步,添加依赖

        <!--添加validation依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

第二步、在接口中需要验证的对象前添加 @Valid 注解

    @PostMapping(value = "")
    public User create(@RequestBody @Valid UserRequestBean bean) {
        return userService.create(bean);
    }

对于验证的对象通过添加注解,进行校验

@Getter
@Setter
public class UserRequestBean {

    @NotNull(message = "用户名不能为空")
    private String username;

    @NotNull(message = "年龄不能为空")
    @Range(min = 18, max = 24, message = "年龄要在18-24之间")
    private Integer age;

    @NotNull(message = "性别不能为空")
    @Range(min = 0, max = 1, message = "性别只能是男1女0")
    private Integer gender;

    @NotEmpty(message = "手机号不能为空")
    @Pattern(regexp = "1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\\d{8}", message = "请输入合法的手机号")
    private String phone;

    private String accessCardNumber;


}

这里用到了几个注解

NotNull 不能为null

Range 范围

NotEmpty 不能为null,也不能trim之后是length为0

Pattern 满足对应的正则表达式

第三步、捕获异常,验证失败的时候统一返回提示信息

SpringBoot利用ControllerAdvice注解捕获全局异常并返回统一格式数据_LO嘉嘉VE的博客-CSDN博客

这篇博客介绍了,怎么捕获异常返回统一格式的数据

捕获参数验证异常 MethodArgumentNotValidException ,并返回数据即可

    /**
     * 处理接口请求参数验证异常
     */
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ErrorResponseBean handleValidException(HttpServletRequest request, MethodArgumentNotValidException exception) {
        StringBuilder message = new StringBuilder();
        List<ObjectError> allErrors = exception.getBindingResult().getAllErrors();
        for (ObjectError error :
                allErrors) {
            if (message.length() > 0) {
                message.append("、");
            }
            message.append(error.getDefaultMessage());
        }
        return createErrorBean(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.value(), message.toString(), request);
    }

进阶用法

常用注解介绍

除了上面示例介绍的四个注解,还有一些常用注解如下

Null 必须为空

Min 数字最小值

Max 数字最大值

Past 必须为过去的一个日期

Future 必须为将来的一个日期

Length 字符串长度的范围

其他验证

上面例子是对class对象的整体验证,如果是直接传输了一个参数,例如获取列表的搜索字段,直接进行验证,可以直接在Controller中定义规则

    @GetMapping
    public Page<User> list(@RequestParam @Min(value = 0, message = "页数最少为0") int page,
                           @RequestParam @Min(value = 1, message = "每页最少条数为1") int size,
                           @RequestParam(required = false) String username,
                           @RequestParam(required = false) Integer maxAge,
                           @RequestParam(required = false) Integer minAge,
                           @RequestParam(required = false) Integer gender,
                           @RequestParam(required = false) String phone,
                           @RequestParam(required = false) String accessCardNumber,
                           @RequestParam(required = false) String orderParam,
                           @RequestParam(required = false) String direction) {
        return userService.list(page, size, username, maxAge, minAge, gender, phone, accessCardNumber, orderParam, direction);
    }

直接使用注解定义要验证的规则就行。要注意的是,需要在这个类上添加一个注解Validated,这样参数中的注解就会生效了。

@Validated
@RestController
@RequestMapping(value = "/user")
public class UserController 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LO嘉嘉VE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值