基于 spring 的参数校验框架 mars-validated

Apache
Java
跨平台
2019-12-16
fashionbrot

疫情之下,程序员如何转型?共享数字化转型加速度,就在微软在线技术峰会>>>

mars-validated springmvc springboot springcloud dubbo 参数校验

简单好用的 springmvc springboot springcloud dubbo 参数校验 此框架基于 spring 开发。

使用4步配置

1、导入jar

        <dependency>
            <groupId>com.github.fashionbrot</groupId>
            <artifactId>mars-validated</artifactId>
            <version>1.0.0</version>
        </dependency>

2、使用注解

2.1 springboot 配置

fileName 如果不填默认jar 包自带提示,如果需要批量自定义请按照jar 包下的valid_zh_CN.properties 修改提示语内容

@SpringBootApplication
@EnableValidatedConfig(fileName = "test")    // fileName 默认中文jar包自带 如需要批量自定义请自己创建 test.properties  放在自己项目中的resources 下
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2.2 spring配置

@Component
@Configuration
@EnableValidatedConfig(fileName = "valid_zh_CN")
public class Config {


}

3使用 @Validated 开启接口验证 @Email验证邮箱格式

@Controller
public class DemoController {

    @Autowired
    private TestService testService;
    

    @RequestMapping("/emailCheck")
    @ResponseBody
    @Validated //注意此处
    public String demo(@Email String abc,){
        return testService.test(abc);
    }

}   
@Controller
public class DemoController {

    @Autowired
    private TestService testService;
    
    
    @RequestMapping("/idcardCheck")
    @ResponseBody
    @Validated
    public String demo(IdCardModel idCardModel){
        return testService.test("ac");
    }
    
    @RequestMapping("/idcardCheck2")
    @ResponseBody
    public String demo2(IdCardModel idCardModel){
        return testService.test2("ac");
    }


}

**此处支持多继承验证*** 

public class IdCardModel extends BaseModel{

    @IdCard
    private String idCardModel;

    public String getIdCardModel() {
        return idCardModel;
    }

    public void setIdCardModel(String idCardModel) {
        this.idCardModel = idCardModel;
    }
}

@Service
public class TestService{
    @Validated
    public void test2(@IdCard String abc){

    }
}

4 自定义实现全局异常处理

拦截 ValidatedException

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ValidatedException.class)
    @ResponseStatus(HttpStatus.OK)
    public RespMessage ValidationException(ValidatedException e){

        return new RespMessage(-100,e.getMsg());
    }
}

支持 默认值设置 hibernate默认不支持

import com.github.fashionbrot.validated.annotation.Default;

@Data
public class BaseModel {

    @Default("1")
    private Integer pageNo;

    @Default("20")
    private Integer pageSize;
}

支持 dubbo 接口、实现类上方法上添加 @Validated ,设置 dubbo DubboProviderFilter 拦截器做统一处理

public class DubboProviderFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Result result =  invoker.invoke(invocation);
        if(result.hasException() && result.getException() instanceof ValidationException){
            throw new CustomException(result.getException()); //自定义异常,全局拦截控制,或抛出 RpcException 自行拦截
        }
        return result;
    }
}

validated 参数验证

使用环境

spring4.0 及以上
jdk1.8 及以上

Annotation Supported data types 作用
NotBlank String 验证String 字符串是否为空
NotNull String,Object,Integer,Long,Double,Short,Float,BigDecimal, BigInteger 验证对象是否为空
NotEmpty String 验证字符串不能为空
AssertFalse Boolean,boolean,String 只能为false
AssertTrue Boolean,boolean,String 只能为true
BankCard String 验证银行卡
CreditCard String 验证信用卡
Default Integer,Double,Long,Short,Float,BigDecimal,String 设置默认值
Digits String 验证是否是数字
Email String 验证是否是邮箱
IdCard String 验证是否是身份证,验证18岁
Length int,long,short,double,Integer,Long,Float,Double,Short,String 验证长度
Pattern String 正则表达式验证
Phone String 验证手机号是否正确
Size int,long,short,Integer,Long,Short 验证大小值
NotEqualSize String 验证长度


### 支持自定义注解 如下:

```bash
1、实现  ConstraintValidator 此接口
2、自定义注解如下:  CustomConstraintValidator.class,CustomConstraintValidator2.class 实现类可多个,至少有一个

    @Documented
    @Target({ElementType.FIELD,  ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = {CustomConstraintValidator.class,CustomConstraintValidator2.class})
    public @interface Custom {
    
        String msg() default "com.spv.valid.Custom.msg";
    
        int min();
    }


3、代码实现



public class CustomConstraintValidator implements ConstraintValidator<Custom,String> {

    @Override
    public boolean isValid(Custom custom,String var1) {
        /**
         * 自定义方法
         */
        int min=custom.min();
        /**
         * value
         */
        System.out.println(var1);
        /**
         * return true 则验证成功 false 验证失败
          */
        return true;
    }
}

6、可通过 test项目中的 https://github.com/fashionbrot/mars-validated/tree/master/test/springboot-test 参考使用demo

7、如有问题请通过 https://github.com/fashionbrot/mars-validated/issues 提出 告诉我们。我们非常认真地对待错误和缺陷,在产品面前没有不重要的问题。不过在创建错误报告之前,请检查是否存在报告相同问题的issues。

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

参数验证 @Validated 和 @Valid 的区别

来源:blog.csdn.net/qq_27680317/article/details/79970590 整编:Java技术栈(公众号ID:javastack) Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范...

2019/01/21 10:39
232
0
使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

2018/06/22 20:07
3.3K
0
C# TextBox中的Validating与Validated事件

validating事件发生的时候,值还没有被真正存入,所以是空的,而 validated事件发生的时候,值已经存入,所以能取出;一个相当于值的前因,一个相当于值的后果。也就是说,可以用validating事...

2013/04/09 23:37
836
0
hive问题 could not create a validated object的解决方法

hive问题Cannot get a connection, pool error Could not create a validated object 的解决办法

2014/09/15 17:31
690
0
Digital Mars Compiler简介及使用

很早就下载了Digital Mars 的编译器dm8.42,现在已经都8.52了,下载来是一个压缩包,不用安装,解压之后就可以使用,这可那些vs好多了,文件小,不用安装,哈哈!可是当初的我在这方面是个菜...

2011/11/14 13:05
823
0
【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件。

2016/11/14 12:48
468
0
eclipse mars.2 install jboss tools failure

eclipse mars.2 install jboss tools fail. eclipse oxygen isntall jboss tools success.

2016/11/02 09:52
80
0
Eclipse-Mars Release (4.5.0)创建Maven项目报错

1、Eclipseb版本为Mars Release (4.5.0) 2、报错内容 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could no...

2015/09/27 21:06
2.9K
0
【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。

2016/10/17 11:43
153
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部