参数校验

前言:

在技术选型上纠结了下,最后还是觉得这东西也不复杂,自己写比较爽,跟自己的系统结合更顺畅一点。于是模仿JSR303自己写了一套。

使用方法

1. maven引入:


    com.cargopm
    util
    2.0.1-SNAPSHOT

2. Spring配置:

请先确保引入aop schema:

参数校验_第1张图片
image.png

配置拦截器:

...


...

3. 对象中的字段加上注解

import com.cargopm.util.validator.*;

@CanValidate
public class UserVO {

    @NotBlank(msg = "名字不能为空")
    private String name;

    @NotBlank
    private String nickname;

    @NotNull
    private String title;

    @Max(value = 200, msg = "年龄不能超过200")
    @Min(value = 0)
    private Integer age;

    @Pattern(value = ".*(?=.{6,})(?=.*\\d)(?=.*[a-zA-Z]).*", msg = "密码必须是大于6位且必须带1个英文和1个数字")
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

注意:对象上必须加上@CanValidate注解

4. Ctrl方法加上注解

    @RequestMapping("/registTest.gou")
    @ResponseBody
    @ParamCheck
    public RestResult register(UserVO user){
        RestResult result = new RestResult();
        // 一堆业务逻辑处理  略
        return result;
    }

方法加了@ParamCheck注解后,会被拦截器拦截,并自动检查传入参数,对@CanValidate注解的参数进行检查
注意:返回的对象必须实现IResult接口,我们统一ctrl层的返回格式。

IResult:

package com.cargopm.util.rest;
public interface IResult{
    void setSuccess(Boolean success);
    Boolean getSuccess();
    void setErrorCode(String errorCode);
    String getErrorCode();
    void setContent(Object content);
    Object getContent();
    void setErrorMsg(String errorMsg);
    String getErrorMsg();
}

试试!

image.png

在非ctrl方法中使用

    public static void main(String[] args) {
        UserVO user = new UserVO();
        user.setAge(201);
        user.setPassword("a111");
        ValidResult validResult = new BeanValidator().valid(user);
        System.out.println("hasErrors:"+validResult.hasErrors());
        System.out.println("errMsgs:"+validResult.getErrMsgs());
    }
参数校验_第2张图片
image.png

字段验证注解说明

注解 属性&说明
@NotBlank 用于验证字符串是否为空或空格,只能应用于String类型的字段
@NotNull 用于验证属性是否为null, 适用于所有类型的字段
@Max 用于验证数字的最大值,只能用于数字字段,必须设置value属性
@Min 用于验证数字的最小值,只能用于数字字段,必须设置value属性
@Size 用于验证字符串的长度,只能用于String类型的字段,可以设置minmax属性
@Pattern 用于正则表达式验证

所有注解都可以设置msg属性,作为错误描述,暂时只写了这几个验证,目前应该能满足需求,不够的话后面再加。

你可能感兴趣的:(参数校验)