코틀린 및 @유효한 스프링 주석
엔티티가 있습니다.
class SomeInfo(
@NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) {
var id: Long? = null
}
컨트롤러 방법:
@RequestMapping(value = "/some-info", method = RequestMethod.POST)
public Id create(@Valid @RequestBody SomeInfo someInfo) {
...
}
@Valid
주석이 작동하지 않습니다.
Spring은 기본 매개 변수 없는 생성자가 필요한 것처럼 보이며 위의 고급 코드는 다음과 같은 추악한(하지만 작동 중인) 것이 됩니다.
class SomeInfo() {
constructor(value: String) {
this.value = value
}
@NotNull @Pattern(regexp = Constraints.EMAIL_REGEX)
lateinit var value: String
var id: Long? = null
}
말을 덜 할 수 있는 좋은 방법이 있습니까?
감사해요.
스프링이 필드에 적용하려면 이러한 주석이 필요한 것 같습니다.그러나 Kotlin은 이러한 주석을 생성자 매개 변수에 적용합니다. 사용field:
필드에 적용할 주석을 적용할 때 지정자입니다.다음 코드가 당신에게 잘 작동할 것입니다.
class SomeInfo(
@field:NotNull
@field:Pattern(regexp = Constraints.EMAIL_REGEX)
var value: String
) {
var id: Long? = null
}
마이클의 대답에 대한 대안으로 게터에 주석을 다는 것도 효과가 있습니다.
class SomeInfo(
@get:NotNull
@get:Pattern(regexp = Constraints.EMAIL_REGEX)
var value: String
) {
var id: Long? = null
}
짜증나는 부분은 @get: 또는 @field:를 사용하지 않으면 생성자 매개 변수에 주석이 추가된다는 것입니다.이것은 여전히 유효한 코틀린 코드이므로 오류가 발생하지 않습니다.이러한 사용 사례에서는 무용지물입니다.
만약 당신이 IntelliJ를 사용하여 Java를 Kotlin으로 변환한다면,@Valid
스프링 컨트롤러 방법의 주석은 결국 변수 대신 형식에 부착될 수 있습니다.이렇게 하면 유효성 검사가 중단됩니다.
예를 들어, 변환은 다음과 같은 결과를 초래할 수 있습니다.
@PostMapping
public Id create(@RequestBody someInfo: @Valid SomeInfo) {
...
}
유효성을 검사하고 있지 않습니다.@Valid
다음과 같은 변수로 이동해야 합니다.
@PostMapping
public Id create(@RequestBody @Valid someInfo: SomeInfo) {
...
}
또한 휴식 컨트롤러는 다음과 같이 표시되어야 합니다.@Validated
주석
원시 요소의 함수 유효성 검사:
@Validated
class MyClass() {
fun myFun(@Valid @NotEmpty @Size(min = 3, max = 30) name: String) {
}
}
이메일 주소를 확인하는 경우 다음과 같이 작성할 수 있습니다.
import javax.validation.constraints.Email
import javax.validation.constraints.Size
data class User(
val id: Long,
@field:Size(min = 2)
val firstName: String,
@field:Size(min = 2)
val lastName: String,
@field:Email
val email: String,
..)
언급URL : https://stackoverflow.com/questions/36515094/kotlin-and-valid-spring-annotation
'programing' 카테고리의 다른 글
#1148 - 사용된 명령은 이 MariaDB 버전에서 허용되지 않습니다. (0) | 2023.07.30 |
---|---|
MySQL로 대용량 결과 세트 스트리밍 (0) | 2023.07.30 |
jQuery 게시 요청이 중단되었습니다.사후 매개 변수의 절반만 도착 (0) | 2023.07.30 |
파일로 리디렉션될 때 stdout에 명시적 플러시가 필요한 이유는 무엇입니까? (0) | 2023.07.30 |
Oracle에 C#을 연결하는 중 (0) | 2023.07.30 |