개요
Kotlin + Spring으로 처음으로 프로젝트 세팅을 해보고 있는데 여기저기서 에러가 많이 터졌다. 그 중에서도 Entity + JPA 설정하는 데 애를 많이 먹었다.
JAVA 진영에서는 ORM을 주로 JPA(인터페이스)와 Hibernate(구현체)로 구현한다.
주로 엔티티 컬럼에는 Camel Case로 작성하고 실제 DB에는 snake_case로 작성을 하게 되는데 일일이 지정을 해줘야하는 부분이 불편했는데 이를 개선하는 방법이 있어 소개해본다.
@JsonProperty, @JsonNaming
기존 방식대로 @JsonProperty
를 사용하면 일일이 지정을 해줘야한다.
Entity
@Entity
class Url (
@Column(nullable = false)
@JsonProperty("long_url")
var longUrl: String,
@Column(nullable = false)
@JsonProperty("short_url")
var shortUrl: String,
...
)
결과
{"short_url": "https://abc.co/uD237cz", "long_url": "https://abcdefghizk.com/abcd123456"}
만약 공통적으로 적용시키고 싶은 Entity에서는 @JsonNaming
을 사용한다면 한 번의 적용을 통해 깔끔히 해결할 수 있다.
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
@Entity
class Url (
@Column(nullable = false)
var longUrl: String,
@Column(nullable = false)
var shortUrl: String,
...
)
결과는 동일하게 나온다!!
참고로 기존에 사용됐던 PropertyNamingStrategy는 Jackson Module의 2.12버전부터 deprecated 되어서 PropertyNamingStrategies를 사용해야 한다. 참고
참고