GraphQL 스터디/SPQR 라이브러리

GraphQL Custom Validation 추가

막이86 2023. 11. 10. 19:08
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
  }
}

응답

{
  "errors": [
    {
      "message": "나이 입력이 잘못되었습니다.",
      "locations": [],
      "extensions": {
        "code": "createUser.user",
        "detailMessage": ""
      }
    }
  ],
  "data": {
    "createUser": null
  }
}

예제 코드

https://github.com/clghks/graphQL-Error

728x90

'GraphQL 스터디 > SPQR 라이브러리' 카테고리의 다른 글

GraphQL Validation 추가  (0) 2023.11.10
GraphQL 오류 처리  (0) 2023.11.10