参数校验

前言:

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

使用方法

1. maven引入:

<dependency>
    <groupId>com.cargopm</groupId>
    <artifactId>util</artifactId>
    <version>2.0.1-SNAPSHOT</version>
</dependency>

2. Spring配置:

请先确保引入aop schema:

image.png

配置拦截器:

...
<aop:aspectj-autoproxy/>
<bean class="com.cargopm.util.rest.CtrlParamValidInterceptor" />
...

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());
    }
image.png

字段验证注解说明

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,274评论 0 4
  • hibernate Validator 是 Bean Validation 的参考实现 。 Hibernate V...
    一路逆风i阅读 3,193评论 0 1
  • 什么是jsr303?JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 ...
    lialzm阅读 5,112评论 4 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 1.为了完成新的业务需求,创建了feature分支,完成开发之后,需要将代码merge到release分支同时删除...
    karlsu阅读 259评论 0 0

友情链接更多精彩内容