728x90
Custom Validation 필요성
- 정의 되지 않은 Validation를 사용할 경우 필요
- ex: 나이 입력값과 성인유무를 입력받는 경우 나이에 따라서 성인유무도 체크 해야함
Custom Validation 추가
@Documented
@Constraint(validatedBy = [CustomValidator::class])
@Target(AnnotationTarget.CLASS)
annotation class CustomValid(
val message: String = "",
val groups: Array<KClass<*>> = [],
val payload: Array<KClass<out Payload>> = []
)
class CustomValidator: ConstraintValidator<CustomValid, User> {
override fun isValid(value: User, context: ConstraintValidatorContext): Boolean {
if (value.isAdult && value.age < 18) {
context.disableDefaultConstraintViolation()
context.buildConstraintViolationWithTemplate("나이 입력이 잘못되었습니다.").addConstraintViolation()
return false
}
return true
}
}
사용자 데이터
@CustomValid
data class User(
val id: Long?,
@get:NotBlank(message = "이름은 공백일 수 없습니다.")
val name: String?,
val age: Int = 0,
val isAdult: Boolean = false
)
API 호출
mutation {
createUser(user: {
id: 1
name: "test"
age: 10
isAdult: true
}) {
id
name
}
}
응답
- Custom Validation이 체크 되지 않는다면 GraphQL Validation 추가 설정 부분 참고
{
"errors": [
{
"message": "나이 입력이 잘못되었습니다.",
"locations": [],
"extensions": {
"code": "createUser.user",
"detailMessage": ""
}
}
],
"data": {
"createUser": null
}
}
예제 코드
728x90
'GraphQL 스터디 > SPQR 라이브러리' 카테고리의 다른 글
GraphQL Validation 추가 (0) | 2023.11.10 |
---|---|
GraphQL 오류 처리 (0) | 2023.11.10 |