Code Monkey home page Code Monkey logo

final-validator's Introduction

final-validator

介绍

final-validator 是一个JavaBean元数据校验模型和方法验证,能够自定义注解来扩展校验范围,符合国内开发习惯的参数校验java库。

引入依赖

jdk8+ springboot2.x springboot3.x springmvc5.x springmvc6.x 非spring体系项目

<dependency>
    <groupId>top.lingkang</groupId>
    <artifactId>final-validator</artifactId>
    <version>2.1.0</version>
</dependency>

版本查看

springmvc中

1、编写一个入参类

import top.lingkang.finalvalidated.constraints.Length;
import top.lingkang.finalvalidated.constraints.Tag;

@Data
public class LoginParam {
    @NotBlank// 不为空
    @Length(min = 6, max = 20) // 长度范围 6~20
    private String username;

    @Tag("密码")
    @NotBlank
    @Length(min = 6, max = 20) // 长度范围 6~20
    private String password;
}

2、springmvc的api如下,使用@ValidObject开启入参校验。

@RequestMapping("/login")
public Object login(@ValidObject LoginParam param) {
    return param;
}

注意,不添加@ValidObject注解将导致无法使用final-validator的校验功能

3、编写一个异常捕获

若校验不通过将会抛出 top.lingkang.finalvalidated.error.ValidatedException 异常,捕获它自定义返回前端值。例如下面这样:

@RestControllerAdvice
public class ExceptionConfig {
    /**
     * 捕获校验异常,返回rest结果
     */
    @ExceptionHandler(ValidatedException.class)
    public Object v(ValidatedException e) {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 1);
        map.put("msg", e.getMessage());
        // map.put("object", e.getObjectName());
        // map.put("filed", e.getFiledName());
        return map;
    }
}

4、调用

启动springboot,访问与结果返回:

/login?username=&password= 返回结果

{"msg":"username 不能为空","code":1}

/login?username=123&password= 返回结果

{"msg":"username 字符长度范围: 6 ~ 20","code":1}

/login?username=123456&password=123 返回结果

{"msg":"密码 字符长度范围: 6 ~ 20","code":1}

/login?username=123456&password=12345678 返回结果

{"username":"123456","password":"12345678"}

若你想直接校验某个参数对象,可以直接调用:

LoginParam param=new LoginParam();
param.setUsername("admin");
// 校验,失败时会通过 ValidatedException 异常抛出,
// 能够通过 ValidatedException 获取到 字段名称、对象名称、错误信息等。
FinalValidator.valid(param);

非spring体系中使用

调用 FinalValidator.init() 初始化后,任意地方调用FinalValidator.valid(param)即可。

public static void main(String[] args) {
    // 初始化校验,只需初始化一次即可
    FinalValidator.init();

    LoginParam param=new LoginParam();
    param.setUsername("admin");

    // 校验,失败时会通过 ValidatedException 异常抛出,
    // 能够通过 ValidatedException 获取到 字段名称、对象名称、错误信息等。
    FinalValidator.valid(param);
}

solon 中使用

solon: final-validator-solon

添加自己的自定义校验

可以自定义注解,自己实现校验,请查看:添加自定义注解

自定义消息文字

final-validator 默认的消息文字位于 defaultValidated.properties。 若您想自定义,可在resources下添加一个 finalValidated.properties配置文件,框架初始化时将会加载并覆盖原有的默认配置。

NotBlank={message} 不能是空值

具体key-value需要参考:defaultValidated.properties

底层原理

底层原理介绍:https://lingkang.top/archives/final-validator-shou-lu-validator

性能

底层缓存了注解处理,性能几乎可以忽略不计。

注解

验证注解 说明
@NotBlank 注解的属性必定不为空、不为空格字符
@NotEmpty 注解的属性必定不为空、但可以为空格字符
@NotNull 注解的属性必定不是空,即 非 null 值
@Null 注解的属性必定是空,即 null 值
@Min 注解的属性最小值,小于等于
@Max 注解的属性最大值,不大于等于
@Length 注解的属性的长度,指定最小长度和最大长度,min与max不能相等
@AssertFalse 验证注解的元素值是否是 false ,当值为 false 时将通过校验
@AssertTrue 验证注解的元素值是否是 true ,当值为 true 时将通过校验
@Email 注解的属性的值是否是邮箱
@Pattern 注解的属性的值是否符合自定义正则表达式
@Tag 注解的属性的tag值,将会覆盖该字段其他注解的所有tag值(v1.1.1)

常用验证

1. 验证账号

@Pattern(value = "^[a-zA-Z0-9_]{4,20}$", message = "账号只能由字母、数字、下划线组成,并且长度为4~20个字符")
private String username;

2. 性别验证

@Pattern(value = "男|女|保密", message = "性别只能是:男、女或保密")
private String sex;

其它

final-validator's People

Contributors

xcocean avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.