zoukankan      html  css  js  c++  java
  • SpringBoot-服务端参数验证-JSR-303验证框架

    1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用。

    比如:

    复制代码
    @RestController
    @RequestMapping("/hibernate")
    public class DefaultHibernateValidatorTestController {
    
        /**
         * Springboot 默认会验证 controller 层的 validator,使用的是默认实现 hibernate-validator。
         * 但是 hibernate-validator 只能对Object类型的属性进行校验,不能对单个的参数进行校验。下面的校验不生效
         * @param str
         * @return
         */
        @RequestMapping("/string")
        public OpResponse valiateString(@NotEmpty(message = "str不能为空") String str){
            return OpResponse.suc(str);
        }
    
        /**
         * 检验生效
         * @param foo
         * @return
         */
        @RequestMapping("/foo")
        public OpResponse valiateString(@Valid @NotNull Foo foo){
            return OpResponse.suc(foo);
        }
    
        static class Foo implements Serializable {
            @NotNull
            private Integer id;
            @NotEmpty
            private String name;
            ........
        }
    }
    复制代码

    2. hibernate-validator不支持基础类型的验证,springboot对其进行了扩展,添加了MethodValidationPostProcessor拦截器,可以实现对方法参数的校验。

    例如:

    复制代码
    /**
     * 对基础类型的验证,必须要在Controller类上加 @Validated,同时配置 MethodValidationPostProcessor 才生效
     * <pre>
     *     @Bean
     *     public MethodValidationPostProcessor methodValidationPostProcessor() {
     *         return new MethodValidationPostProcessor();
     *     }
     * </pre>
     * @link https://yezhwi.github.io/springboot/2017/11/17/SpringBoot-服务端参数验证-JSR-303验证框架
     * Created by wangzhiyuan on 2018/8/20
     */
    @RestController
    @RequestMapping("/validate")
    @Validated
    public class ValidatorTestController {
        @Resource
        BizService bizService;
    
    
        @RequestMapping("/string")  // 这个 @NotEmpty 是生效的
        public OpResponse valiateString(@NotEmpty(message = "str不能为空") String str){
            bizService.validateTest(str);
            return OpResponse.suc(str);
        }
    
    
        /**
         * 可以看出,springboot默认只会验证 controller 方法上的 validator 注解,而不会验证 controller 层以外的。所以,如果要在其他层使用 validator 验证的话,需要单独配置拦截器
         * @return
         */
        @RequestMapping("/blank")
        public OpResponse blank(){
            String str = null;
            bizService.validateTest(str);
            bizService.validateFooTest(null);
            return OpResponse.suc(str);
        }
    
    }
    复制代码

    3. springboot默认只会验证 controller 方法上的 validator 注解,而不会验证 controller 层以外的。所以,如果要在其他层使用 validator 验证的话,需要单独配置拦截器

    其他内置的校验类型可参考2.4. Built-in constraints

  • 相关阅读:
    php RSA公钥私钥加解密和验证用法
    php格式化RSA公钥私钥字符串
    你的周末时光是什么样的?
    php-redis 消息订阅笔记
    php redis 常用操作
    MySql索引笔记
    yii1框架,事务使用方法
    python 项目打包成exe可执行程序
    Linux修改默认端口
    C++字符串作为参数的传递
  • 原文地址:https://www.cnblogs.com/yuluoxingkong/p/10194840.html
Copyright © 2011-2022 走看看