작성
·
191
0
...
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
data class UserRequest(
...
@field:Pattern(regexp = "^\\\\d{2,3}-\\\\d{3,4}-\\\\d{4}\\\$")
var phoneNumber:String?=null,
)
위와 같이 UserRequest
데이터클래스에서 @JsonNaming
과 @field:Pattern
을 동시에 사용하면 @JsonNaming
의 snake case 적용이 작동하지 않아 PUT 요청의 body 에 phoneNumber
로 요청해야만 정상 작동하고 phone_number
로 요청하면 400 에러가 나지만, 해당 필드에 @field:Pattern
대신 @field:Size
를 사용하면 @JsonNaming
에 기대하는대로 phone_number
로 요청해도 200 응답으로 정상작동 하는 현상을 겪고 있습니다.
왜 Validation 어노테이션을 바꾸었을 뿐인데 그와 상관없어보이는 @JsonNaming
의 작동 여부에 영향을 끼치는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
@JsonNaming
어노테이션은 Jackson 라이브러리에서 JSON의 프로퍼티 명명 규칙을 정의할 때 사용되며, @field:Pattern
어노테이션은 Java Validation API를 이용하여 필드 값의 패턴을 검증할 때 사용합니다. @JsonNaming
어노테이션이 올바르게 적용되는지 여부는 JSON 마샬링/언마샬링 단계에 영향을 미치기 때문에, Kotlin 코드의 필드 이름과 JSON 필드 이름의 카멜케이스/스네이크케이스 변환이 올바르게 작동하는지 확인하는 것이 좋습니다.
@field:Pattern
대신 @field:Size
를 사용했을 때 정상적으로 동작하는 것을 보면, 문제는 @field:Pattern
에서 발생하고 있는 것이 아닐까 추정할 수 있습니다. 하지만 제시하신 정보에 준해서는 @JsonNaming
과 @field:Pattern
이 함께 사용될 때 왜 문제가 발생하는지 직접적인 원인을 파악하기 어렵습니다.
검증 어노테이션을 사용할 때 Kotlin과 Java 간의 상호 운용성 문제로 인해 애노테이션을 올바르게 적용하기 위해서는 특별한 구문을 사용해야 할 수도 있습니다. 말씀하신 문제는 JSON 라이브러리와 유효성 검증 라이브러리 각각의 구현 방식과 상호작용 때문에 발생할 수 있는 이슈로 보이므로, 해당 라이브러리들의 문서를 참고하거나 라이브러리 제공자에게 해당 이슈에 대해 문의할 필요가 있습니다.
더 자세한 해결책을 찾기 위해서는 해당 코드가 포함된 전체 프로젝트 맥락에서 더 많은 정보를 제공하거나, 관련 커뮤니티나 Stack Overflow와 같은 포럼에서 이 문제를 경험한 다른 개발자들과 정보를 공유하는 것도 도움이 될 수 있습니다.
아울러 Spring과 Kotlin을 함께 사용하는 경우와 관련된 더 구체적인 내용을 찾고자 하신다면, Spring Boot Reference Documentation의 Kotlin Support 부분을 참조하시는 것이 좋겠습니다. 현재 제공된 정보에서는 Kotlin과 관련된 테스팅 방법에 대한 내용이 일부 존재합니다. JSON 테스팅이나 mocking 라이브러리의 사용에 대한 정보는 아래 헤더 및 링크를 참조해주시기 바랍니다.
질문에 대한 명확한 해결책을 찾지 못한 점 죄송합니다만, 추가적인 디버깅과 테스트를 통해 문제의 근본 원인을 찾는 것이 필요할 것 같습니다.