========== UPDATEを取得することはできません:NOTNULL、@get:最小@get:Max、hibernate-validatorは、これらの注釈の成功を読み取ることができます。kotlin:私は@getする注釈を変更したとき==========</p> <p>を検証APIの注釈
しかし、私はまだ知りたいです:
JPAの注釈をすることができますが、なぜこのよう@NotNull、@Minと@Maxとして検証-APIの注釈は、直接データクラスのメンバーに使用することはできませんか? ???
==========ベローは、私は、データクラス上のバリデータを検証-APIのアノテーションを使用しようとした原点質問===========
ですclass(hibernate-validatorから)はアノテーションを取得できないため、検証は失敗しました。
- 第一1つの使用JPA注釈@Columnと@Id、テストケースによって成功裏に読み取ることができます: iは3つのデータクラスを含めたテストケースを、書きました。
- 第二1回の使用検証-APIの注釈@NotEmpty、ミン@、マックス@メンバーに、これらのアノテーションは、テストケースで読み取ることができません
- 第三一回の使用検証-APIの注釈@get:NotEmpty、@get:最小、@ get:Max、テストケースはこれらの注釈を読み取ることができません。
@Column、@NotNull、@Minと@Maxの対象と保持が全てです:だから RUNTIMEとFIELD
、何が背後で起こったのか?検証アノテーションを正しく使用するにはどうすればよいですか?ここで
は、テストケースである:
import org.hibernate.validator.constraints.NotEmpty
import org.junit.Test
import javax.persistence.Column
import javax.persistence.Id
import javax.validation.constraints.Max
import javax.validation.constraints.Min
import kotlin.reflect.KFunction
import kotlin.reflect.KProperty
import kotlin.reflect.jvm.javaField
import kotlin.reflect.jvm.javaMethod
class KotlinFeatureTest2 {
@Test
fun test_get_annotation() {
// can get field's annotation for BeanUseJPAAnnotation success
println("Getting field annotations for BeanUseJPAAnnotation :")
BeanUseJPAAnnotation::class.members.forEach {
if (it is KProperty) {
val field = it.javaField
println("${field?.name}'s annotations:")
field?.annotations?.forEachIndexed { i, an ->
println(" $i is: $an")
}
}
}
println("--------------------")
println("Getting field annotations for BeanUseValidationAnnotation :")
// CANT get field's annotation for BeanUseJPAAnnotation success
BeanUseValidationAnnotation::class.members.forEach {
if (it is KProperty) {
val field = it.javaField
println("${field?.name}'s annotations:")
field?.annotations?.forEachIndexed { i, an ->
println(" $i is: $an")
}
}
}
println("--------------------")
println("Getting field annotations for BeanUseValidationAnnotationOnMethod :")
// CANT get field's annotation for BeanUseJPAAnnotation success
BeanUseValidationAnnotationOnMethod::class.members.forEach {
if (it is KFunction) {
val method = it.javaMethod
println("${method?.name}'s annotations: ")
method?.annotations?.forEachIndexed { i, an ->
println(" $i is: $an")
}
}
}
}
}
data class BeanUseJPAAnnotation(
@Column(name = "id") @Id val id: String,
@Column(name = "user_name") val name: String)
data class BeanUseValidationAnnotation(
@NotEmpty(message = "name can not be empty")
val name: String,
@Min(value = 1)
@Max(value = 100)
val age: Int
)
data class BeanUseValidationAnnotationOnMethod(
@get:NotEmpty(message = "name can not be empty")
val name: String,
@get:Min(value = 1)
@get:Max(value = 100)
val age: Int)
、ここでは、このテストケースの出力れる:
Getting field annotations for BeanUseJPAAnnotation :
id's annotations:
0 is: @javax.persistence.Column(nullable=true, unique=false, precision=0, name=id, length=255, scale=0, updatable=true, columnDefinition=, table=, insertable=true)
1 is: @javax.persistence.Id()
name's annotations:
0 is: @javax.persistence.Column(nullable=true, unique=false, precision=0, name=user_name, length=255, scale=0, updatable=true, columnDefinition=, table=, insertable=true)
--------------------
Getting field annotations for BeanUseValidationAnnotation :
age's annotations:
name's annotations:
--------------------
Getting field annotations for BeanUseValidationAnnotationOnMethod :
component1's annotations:
component2's annotations:
copy's annotations:
equals's annotations:
hashCode's annotations:
toString's annotations:
UPDATE:私は、注釈を変更します"@get:NotNull"、 "@get:Min"、 "@get:Max"の場合、hibernate-validatorはこれらの注釈の成功を読み取ることができます。しかし、私がまだ知りたいことは、JPAのアノテーションはデータ型のメンバーに直接的には使用できないのに対して、なぜ@ @ NotNull、@Min、@Maxなどの検証APIのアノテーションは直接データクラスのメンバーに使用できないのです。 –