SpringBoot使用@Validated校验请求参数

SpringBoot使用@Validated验证参数

一、前言

在前端传递参数给后台接口的时候,后端会对传递的参数做一个基础校验,以前是手动写if一个个验证,效率极其低,而且还做了很多重复工作。本例没有太对基础和原理讲解,直接上代码,就是要简单粗暴,大家先用起来再说。项目源代码请访问github获取。

github

博客地址

二、使用步骤

Hibernate Validator在JSR 303校验框架中提供了很多注解类。此Hibernate与ORM框架无关,只是一个实现了JSR-303规范的验证框架。
@Validated可以看作是@Valid的加强注解,@Valid能只能作用在方法、属性、构造、参数上,而@Validated可以作用在类上。

2.1 在VO类上加上验证规则

在VO类属性上,我们可以加上我们需要的验证规则。

package com.agger.validatortest.vo;

import com.agger.validatortest.system.annotation.PhoneValidator;
import lombok.Data;
import lombok.ToString;
import javax.validation.constraints.*;

/**
 * @classname: User
 * @description: User类
 * @author chenhx
 * @date 2019-11-17 21:07
 */
@Data
@ToString
public class UserVO {
   

    private Integer id;

    @NotNull(message = "用户姓名不能为空")
    @Size(min=1,max=20,message = "用户姓名超出范围限制{min}-{max}")
    private String name;

    @NotBlank(message = "手机号码不能为空")
    @PhoneValidator         //自定义验证注解
    private String phone;

    @NotNull
    @Max(value = 100,message = "超出年龄限制{value}")
    @Min(value = 1,message = "最小年龄为{value}")
    private Integer age;

    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
}
2.2 Controller类

@Validated注解作用在控制类上,会将类中的所有方法都开启参数校验。只有作用在类上,GET方式的请求才会校验。单独作用在请求方法上,只有POST请求校验生效,GET请求校验不会生效。

package com.agger.validatortest.controller;

import com.agger.validatortest.system.annotation.PhoneValidator;
import com.agger.validatortest.vo.ResultVO;
import com.agger.validatortest.vo.UserVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @classname: UserController
 * @description: user控制器
 * @author chenhx
 * @date 2019-11-17 21:23
 */
@Validated                      //整个控制器都需要验证参数
@RestController
public class UserController {
   

    //RESTful 风格请求
    @GetMapping("/user/{phone}")
    public ResultVO user(
            @PathVariable
            @NotBlank(message = "手机号码不能为空")
            @PhoneValidator                 //使用自定义注解
                String phone){
   
        ResultVO result = new ResultVO();
        result.setCode(0);
        result.setMsg("通过手机号查询用户成功");
        result.setData("用户phone为:" + phone);
        return result;
    }

    @GetMapping("/getUser")
    public ResultVO getUser
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值