参数校验

前言:

在技术选型上纠结了下,最后还是觉得这东西也不复杂,自己写比较爽,跟自己的系统结合更顺畅一点。于是模仿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属性,作为错误描述,暂时只写了这几个验证,目前应该能满足需求,不够的话后面再加。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容

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