yangs.dev

Jackson SnakeCase / CamelCase 한번에 변경 하기

Jackson SnakeCase / CamelCase 한번에 변경 하기
yangs.dev·

시작하며

오늘도 이야기를 시작 해봅시다

오늘은 특정 GW에서는 카멜 케이스가 아니라 스네이크 케이스로 응답을 줘야 하는 상황이 생겼다.

개발자들은 전통적으로 반복 작업을 싫어하고 key를 바꾸기 위해서 모든 key 마다, @JsonProperty 를 넣어주기엔... 무리가 있다.

어노테이션 하나로 편리하게 변경을 해보자.

@JsonProperty 멈춰!

해당 Task를 다른 분에게 부탁을 했더니 Response 객체의 Data Class에 @JsonProperty로 떡칠을 해두었다.

물론 이렇게 해도 개발에 문제가 없고 동작에도 문제는 없다. 하지만 코드의 가독성이 떨어지고, 솔직히 귀찮다.

JsonProperty 멈춰!!

@JsonNaming을 써보자

어노테이션 하나로 손쉽게, 스네이크케이스와 카멜케이스를 변경 할 수 있다.

아래의 예시 코드를 보자.

        @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
        data class Me(
            val id: Long,
            val userId: Long,
            val issueDate: LocalDateTime,
        )

요렇게 코드를 짠 하고 작성 해준다면, 아래와 같이 짠 하고 JSON이 생성 된 것을 볼 수 있다.

{
  "id" : 1,
  "user_id": 2,
  "issue_date" : "2021-02-02"
}

참쉽죠?

마치며

예전에는 나도 이 @JsonNaming 어노테이션을 모르기도 했고 Jackson을 쓴지 얼마 안되기도 해서 @JsonProperty / Gson의 @SerializedName 으로 많이 사용 했었다. 하지만 1,2개의 key일때는 괜찮지만 20개 30개가 되는 순간 나락이 열리고 유지보수가 점점 힘들어지기 때문에 이렇게 편하게 유지 보수 하면 좋을듯하다. (어노테이션 지옥인것같긴하지만 암튼...)