当前位置: 首页 > 知识库问答 >
问题:

使用容器元素约束的Kotlin数据类和bean验证

宋昕
2023-03-14
data class Some(val someMap: Map<String, @Length(max = 255) String>)

这没有任何影响。有什么想法吗?

我用一个示例项目创建了一个存储库来再现这个案例:https://github.com/mduesterhoeft/bean-validation-container-constraints

共有1个答案

柴阳云
2023-03-14

从Kotlin 1.3.70和1.4开始,应该可以设置一个特定的编译器选项:https://kotlinlang.org/docs/reference/whatsnew14.html#type-annotations-in-the-jvm-bytecode。

在任何以前的版本或任何这种支持不充分的情况下,您都必须编写一个自定义验证器。

验证集合是否只包含十六进制字符串的示例:

@Target(
    AnnotationTarget.FUNCTION,
    AnnotationTarget.PROPERTY_GETTER,
    AnnotationTarget.PROPERTY_SETTER,
    AnnotationTarget.FIELD,
    AnnotationTarget.ANNOTATION_CLASS,
    AnnotationTarget.CONSTRUCTOR,
    AnnotationTarget.VALUE_PARAMETER
)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
@Constraint(validatedBy = [HexStringElementsValidator::class])
annotation class HexStringElements(
    val message: String = "must only contain hex values",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Any>> = []
)

class HexStringElementsValidator : ConstraintValidator<HexStringElements, Collection<Any>> {

    companion object {
        val pattern = "^[a-fA-F0-9]+\$".toRegex()
    }

    override fun isValid(value: Collection<Any>?, context: ConstraintValidatorContext?) =
        value == null || value.all { it is String && pattern.matches(it) }
}
 类似资料:
  • 问题内容: 我想对Bean验证有一个限制,但这不是标准提供的。如果我要使用JPA ,则不会有独特的验证和错误报告机制。 有没有一种方法可以定义为Bean验证约束并将其与JPA结合使用,例如,JPA创建具有唯一约束的列并检查值是否唯一? 问题答案: 除非获得整个表的锁 ,否则基本上不可能使用SQL查询来检查唯一性(任何并发事务都可以在手动检查之后但在提交正在进行的事务之前修改数据)。换句话说,不可能

  • 我试图让Kotlin在spring-data-rest项目上使用JSR303验证。 给定以下数据类声明: 提前感谢您的帮助!

  • 问题内容: 我有一个简单的类,其属性之一为String数组。根据本文档,在数组,集合等上使用@Valid将递归地验证数组/集合的每个元素。 上面对属性的注释生成以下异常: 我正在使用Apache BVal作为验证提供程序。 问题是,上述方法正确吗? 如果不正确,那么使用bean验证来验证数组/集合的正确方法是什么? 如果正确,那么它对Apache BVal有一些限制吗? 问题答案: 通过像完成操作

  • 我在Spring Boot项目中添加了Liquibase配置: 当我启动应用程序时,我得到这个错误: 你知道我如何解决这个问题吗?

  • 我想知道是否有可能将一些自定义类型的新约束验证器注册到Bean验证规范定义的注释中。例如,让我们想象一下,我有一个类,它累加了几个int值 我想注册一个自定义约束验证器来支持这种类型的@正向注释(而不是创建自定义注释)。 这样以后我就可以使用这个:

  • 我有一个像下面这样的模型对象,带有自定义约束验证器。自定义验证器检查是否填充了fileName或小时。 有一种方法将此作为输入,它验证所有以下条件 > 条件不为空(通过默认验证器) criteria.id不为空(通过默认验证器) criteria.name不为空(通过默认验证器) 标准文件名或小时不为空(通过自定义验证器) 空评估(@NotNull@有效标准标准){} 现在,当我为这个模型类编写单