首页 > 解决方案 > 如何注册外部注释以供弹簧验证使用

问题描述

我有一个定义一些注释的库。这个注释可以添加到我的请求中,我想将该注释粘贴到一些自定义验证器上。


外部库

注释类

@Target(
    AnnotationTarget.FUNCTION,
    AnnotationTarget.PROPERTY_GETTER,
    AnnotationTarget.PROPERTY_SETTER,
    AnnotationTarget.FIELD
)
@Retention(AnnotationRetention.RUNTIME)
annotation class UniqueValue()

请求类

class PostReq(
    @field:UniqueValue
    val value: String
)

我的应用

@Component
class UniqueValueValidator() : ConstraintValidator<UniqueValue?, String?> {

    override fun initialize(constraint: UniqueValue?) {}

    override fun isValid(value: String?, context: ConstraintValidatorContext): Boolean {
        println("validation magic")
        return true
    }

}

我无法让 spring 使用我的UniqueLoginValidator来验证我的请求中使用UniqueValue注释的字段。关于如何将它们粘合在一起的任何想法?我不能使用@Constraint(validatedBy = [UniqueValueValidator::class])因为它在外部库中不可用。

标签: springspring-webfluxspring-validatorkotlin-multiplatformspring-kotlin

解决方案


您可以创建一个新的注释来扩展库中的注释,并使用验证约束对该注释进行注释。

@UniqueValue
@Constraint(validatedBy = UniqueValueValidator.class)
public @interface ValidatedUniqueValue {
}

这意味着您将不得不使用这个新创建的注释而不是库中的注释。


推荐阅读