`
TRAMP_ZZY
  • 浏览: 139867 次
社区版块
存档分类
最新评论

Java Validator 泛型化实现

    博客分类:
  • Java
阅读更多

1. Java 的static 方法无法访问泛型类的类型参数,所以如果static 方法需要使用泛型能力,就必须使其称为泛型方法。

public class DomainObjectValidator {
    private static final Logger LOGGER = LoggerFactory.getLogger(DomainObjectValidator.class);

    public static Validator getInstance() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        return factory.getValidator();
    }

    public static <T>  boolean isDomainObjectValid(T object) {
        boolean result = true;
        if (object != null) {
            Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object);
            if (constraintViolations.size() > 0) {
                result = false;
                for (ConstraintViolation violation : constraintViolations) {
                    LOGGER.info("filed={}, msg={}, currentValue={}.",
                            violation.getPropertyPath().toString(),
                            Objects.toString(violation.getMessage()),
                            Objects.toString(violation.getInvalidValue())
                    );
                }
            }
        }
        return result;
    }

    public static <T> Set<ValidateMessage> validateDomainObject(T object) {
        Set<ValidateMessage> validateMessageSet = new HashSet<>();
        if (object != null) {
            Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object);
            if (constraintViolations.size() > 0) {
                for (ConstraintViolation violation : constraintViolations) {
                    ValidateMessage message = new ValidateMessage(
                            violation.getPropertyPath().toString(),
                            Objects.toString(violation.getMessage()),
                            Objects.toString(violation.getInvalidValue())
                    );
                    validateMessageSet.add(message);
                }
            }
        }
        return validateMessageSet;
    }
}
分享到:
评论

相关推荐

    hibernate-validator数据校验jar集合

    `Hibernate Validator`是Java Bean Validation的实现,它为应用程序提供了强大的数据验证功能。`Hibernate Validator`是一个开放源代码项目,由Hibernate团队维护,它基于JSR 303(Bean Validation 1.0)和JSR 349...

    validate-api工具类校验类属性所需jar包集合

    5. **classmate-1.3.4.jar**:ClassMate库是Hibernate Validator的一个辅助组件,它用于在运行时解析和处理Java类型信息,包括泛型类型、数组、参数化类型等。在Bean Validation中,这有助于确定验证规则如何应用于...

    第15章 复习的重点和内容课件

    5. EJB基于JVM和Java EE规范实现,Session Bean用于业务逻辑,Entity Bean用于持久化数据;Stateful Bean保持客户端会话状态,Stateless Bean不维护会话状态。 通过以上知识点的详细解析,考生可以全面理解分布式...

    jsr303.jar

    JSR303,全称为Java Specification Request 303,是Java Community Process(JCP)提出的一个标准,用于在Java应用中实现Bean Validation。这个标准定义了一种规范,允许开发者在模型对象(通常称为Beans)上声明...

    Hibernate实战(第2版 中文高清版)

     11.3.1 Java SE中的持久化上下文传播   11.3.2 在对话中合并脱管对象   11.3.3 在Java SE中扩展持久化上下文   11.4 使用EJB 3.0的对话   11.4.1 使用EJB的上下文传播   11.4.2 利用EJB扩展持久化上下文...

    网上购物系统struts+Oracle10.2

    struts做的一个网上购物系统的练习,包括了以下几个方面的内容: 1.struts国际化处理, 2.动态DynaValidatorForm的用法, 3.tiles框架的使用, 4.Validator校验, ...7.iterate迭代器和JAVA泛型的用法

    fastjson的各种用法例子

    - 使用`JSON.parseObject()`或`JSON.parseArray()`时,指定具体的目标类型,避免使用泛型。 - 避免频繁创建`JSON`实例,可以全局共享一个`JSON`对象。 - 对于大量解析或生成的操作,考虑使用`ParserConfig`和`...

    spring注解-validation所用到的jar包

    在Java世界中,最常见的实现是Hibernate Validator,它是JSR 303/349标准的参考实现。因此,为了在Spring中使用Validation功能,我们通常需要引入以下jar包: 1. `hibernate-validator.jar`:这是Hibernate ...

    xwork-2.2.1源文件

    通过研究这些工具类,开发者可以学习到更多关于Java反射、泛型等高级特性的应用。 总的来说,xwork-2.2.1的源代码是理解Struts2框架的宝贵资源,它揭示了框架的运行机制,提供了许多最佳实践。深入研究源代码,不仅...

    Hutool 参考文档.pdf

    字段验证器(Validator)和字符串格式化(StrFormatter)为表单验证和格式化输出提供了便捷的方法。语言特性概述和JavaBean概述为Hutool在这些领域的应用提供了基础。 集合类概述、Bean工具(BeanUtil)和DynaBean...

    dbcp2-2.1.1和pool2-2.4.2 jar包

    4. **验证器(Validator)**:在连接被分配给应用程序之前,验证其有效性,确保连接未被数据库中断或超时。 5. **配置参数**:包括最大连接数、最小连接数、超时时间等,可以根据实际需求进行调整,以达到最佳性能和...

    jdom 2.0.0

    1. **API优化**:JDOM 2.0.0对API进行了重构,使其更加符合Java 5及更高版本的编程习惯,如使用泛型和注解,提高了代码的可读性和类型安全性。 2. **性能提升**:在处理大型XML文档时,JDOM 2.0.0通过优化内部数据...

    spring_FrameWork3.0

    - **为Java 5 更新的API:** Spring Framework 3.0 对 Java 5 提供了更好的支持,包括使用泛型和枚举等功能。 - **Spring 表达式语言(SPEL):** SPEL 是一种强大的表达式语言,可以在运行时查询和操作对象图。 - *...

    spring2.5的一个新特性

    Spring 2.5改进了对Java泛型的支持,能够保留并利用容器中的类型信息。这意味着你可以更精确地声明bean之间的依赖,减少类型转换的错误,并提升代码的类型安全性。 4. **基于表达式的SpEL(Spring Expression ...

    jwbds-day-8-custom-phone-validation:通过电话验证-使用Spring MVC的Java Web后端开发模块

    - 验证可以通过自定义Validator实现,Spring MVC提供了Hibernate Validator框架支持,可以方便地进行表单验证。 3. **自定义验证器**: - 在Spring MVC中,可以通过创建一个实现`javax.validation....

    eoysky-common-utils:eoysky-common-utils-EOYSKY项目通用实用程序

    5. **集合操作**:包括对Java内置集合的扩展和优化,如泛型工具类、集合转换、查询过滤等。 6. **日期时间处理**:封装了对日期和时间的操作,如日期格式化、时间计算、时区转换等,避免重复编写相同的日期处理代码...

    DWR.xml配置文件说明书(含源码)

    DWR已经默认定义和初始化了常用的Converter,他们分别如下: class="uk.ltd.getahead.dwr.convert.NullConverter"/&gt; class="uk.ltd.getahead.dwr.convert.PrimitiveConverter"/&gt; class="uk.ltd.getahead.dwr....

    HomeWork6

    通常,这样的作业会涉及编写、修改或扩展已有的 Kotlin 代码,以解决特定问题或实现某种功能。学习者可能需要运用到类、对象、函数、协程、数据类、泛型、高阶函数等 Kotlin 的基础和高级特性。 【标签】"Kotlin" ...

    spring batch Doc

    Spring Batch 2.0 版本开始全面支持Java 5,这意味着开发者可以利用Java 5 中提供的新特性,如泛型、枚举等,使得代码更加健壮、可维护。 **2.2 块导向处理** Spring Batch 2.0 引入了块导向处理的概念,这是一种...

Global site tag (gtag.js) - Google Analytics