zoukankan      html  css  js  c++  java
  • 参数验证 validation

    参数验证功能是基于 JSR303 实现的,用户只需标识 JSR303 标准的验证 annotation,并通过声明 filter 来实现验证。

    Maven 依赖

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
    </dependency>

    示例

    参数标注示例

    public class ValidationParameter implements Serializable {
        private static final long serialVersionUID = 7158911668568000392L;
    
        @NotNull // 不允许为空
        @Size(min = 1, max = 20) // 长度或大小范围
        private String name;
    
        @NotNull(groups = ValidationService.Save.class) // 保存时不允许为空,更新时允许为空 ,表示不更新该字段
        @Pattern(regexp = "^\s*\w+(?:\.{0,1}[\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\.[a-zA-Z]+\s*$")
        private String email;
    
        @Min(18) // 最小值
        @Max(100) // 最大值
        private int age;
    
        @Past // 必须为一个过去的时间
        private Date loginDate;
    
        @Future // 必须为一个未来的时间
        private Date expiryDate;
        
        //Get()/Set()
    }

    分组验证示例

    public interface ValidationService { // 缺省可按服务接口区分验证场景,如:@NotNull(groups = ValidationService.class)   
        @interface Save{} // 与方法同名接口,首字母大写,用于区分验证场景,如:@NotNull(groups = ValidationService.Save.class),可选
        void save(ValidationParameter parameter);
        void update(ValidationParameter parameter);
    }

    关联验证示例

    public interface ValidationService {   
        @GroupSequence(Update.class) // 同时验证Update组规则
        @interface Save{}
        void save(ValidationParameter parameter);
    
        @interface Update{} 
        void update(ValidationParameter parameter);
    }

    参数验证示例

    public interface ValidationService {
        void save(@NotNull ValidationParameter parameter); // 验证参数不为空
        void delete(@Min(1) int id); // 直接对基本类型参数验证
    }

    配置

    在客户端验证参数

    <dubbo:reference id="validationService" interface="com.alibaba.dubbo.examples.validation.api.ValidationService" validation="true" />

    在服务器端验证参数

    <dubbo:service interface="com.alibaba.dubbo.examples.validation.api.ValidationService" ref="validationService" validation="true" />

    验证异常信息

    public class ValidationConsumer {   
        public static void main(String[] args) throws Exception {
            String config = ValidationConsumer.class.getPackage().getName().replace('.', '/') + "/validation-consumer.xml";
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config);
            context.start();
            ValidationService validationService = (ValidationService)context.getBean("validationService");
            // Error
            try {
                parameter = new ValidationParameter();
                validationService.save(parameter);
                System.out.println("Validation ERROR");
            } catch (RpcException e) { // 抛出的是RpcException
                ConstraintViolationException ve = (ConstraintViolationException) e.getCause(); // 里面嵌了一个ConstraintViolationException
                Set<ConstraintViolation<?>> violations = ve.getConstraintViolations(); // 可以拿到一个验证错误详细信息的集合
                System.out.println(violations);
            }
        } 
    }
  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9180581.html
Copyright © 2011-2022 走看看