春季:ConstraintValidator似乎没有开除

问题描述

我编写了一个自定义验证器,该验证器将对照json属性值映射到弹性搜索文档POJO的字段值。例如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="divCounter">59 : 59</p>
<button>Start The Counter</button>
{
    "detail": "fullName"
    "values": ["Stack Overflow"]
    "active": "false"
}

因此,如果JSON类似于:

data class DetailsDocument(
    val fullName: String,val address: String,val phoneNumber: String,val emailAddress: String
)

出现,由于{ "detail": "maritalStatus","values":["married"],"active": "true" } 不是maritalStatus中的字段,因此验证失败。

我的验证器注释和实现类如下:

DetailsDocument

我的用法是:

import javax.validation.Constraint
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext
import javax.validation.ReportAsSingleViolation
import javax.validation.constraints.NotNull
import kotlin.reflect.KClass
import kotlin.reflect.full.declaredMemberProperties

@Constraint(validatedBy = [DetailsFieldValidatorImpl::class])
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD)
@NotNull(message = "Value cannot be null")
@ReportAsSingleViolation
annotation class DetailsFieldValidator(val sourceClass: KClass<*>,val message: String = "Value is not valid")

class DetailsFieldValidatorImpl : ConstraintValidator<DetailsFieldValidator,String> {

    private var valueList: List<String>? = null

    override fun isValid(value: String?,context: ConstraintValidatorContext?): Boolean {
        return valueList?.contains(value?.toUpperCase()) ?: false
    }

    override fun initialize(constraintAnnotation: DetailsFieldValidator) {
        valueList = constraintAnnotation.sourceClass.declaredMemberProperties.map { it.toString().toUpperCase() }
    }
}

但是,当我发送无效的json时,看起来好像验证程序无法启动并拒绝该块。我的请求继续进行,并在给定无效值的预期点失败。

我是否想将验证器添加到某种注册表中?也许缺少依赖性?我尝试添加:

data class Account(

    @DetailsFieldValidator(sourceClass = DetailsDocument::class)
    val name: String,val values: List<String>,val active: Boolean
)

但什么也没改变。

我发现了一个非常重要的笔记;我在这里读到了一个答案,即Spring无法识别Kotlin中的注释,但是无法找到任何支持该注释的文档。

implementation("javax.annotation:javax.annotation-api")
implementation("org.springframework.boot:spring-boot-starter-validation")

编辑

我曾尝试添加Java实现,但仍然是相同的问题,因此可以肯定这不是Kotlin支持的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)