Kotlin 때문에 드러난 SpringFramework DTO Validation의 문제점
발견
- Kotlin: Validation-Mapping
- Java: Mapping-Validation
기존에 Java만 사용 할 때는 아무 문제가 없었다
자바 dto는 null이건 뭐건 상관이 없었으니까
일단 값을 처넣은(Mapping) 다음에 Validation을 한다
@Data
class PersonRequestDto {
@NotEmpty
@Size(min=1, max=30)
private String name;
@NotNull
@Min(15)
private Int age;
@NotNull
private String phone;
}
data class PersonRequestDto(
@NotEmpty
@Size(min=1, max=30)
val name: String,
@NotNull
@Min(15)
val age: Int,
@NotNull
val phone: String?,
)
여기서 코틀린을 자바처럼 하면 어떨게 될까?
오류가 난다
NotNull이 다 무의미해진다
Lombok의 @NonNull을 쓰는것처럼 변수 대입자체가 안되니까
그럼 어차피 안 들어가니까 상관없는거 아닌가?? 라고생각할 수 있지만
validation result 자체를 활용하려고 하거나 전체값의 데이터를 다 확인하고 싶은경우에 그게 불가능하다
해결방안
일단 현재로써는 없다
스프링에서 Validation을mapping 전에 해야하는데
이걸 바꿀 수 있을까….
힘들어보이는데
다른 프레임워크의 경우에는 request body에서validation을 처리하면 되지 않으려나
DTO에 설정되어 있는 field, annotation 스캔해서
json을 validation
코틀린에서 조금 부족하지만 쓸만한 벨리데이션툴이 있다
- https://github.com/rcapraro/kalidation
- https://github.com/konform-kt/konform