spring boot/기술 적용

converter를 만들지 않고 jpa mysql에서 json 사용하기

ballde 2022. 6. 28. 10:19

배경

컬럼에 json을 넣을일이 많지는 않지만 가끔 생길수도 있다. 근데 jpa에서 쓰려면 Jacson + 직렬화가 필요하다. 제네릭 converter를 사용해서 직렬화 / 역직렬화 하는 converter을 사용해도 되지만 더 간단한 방법이 있다.

일단 이거를 추가해줍니다.

// json -> jpa
implementation("com.vladmihalcea:hibernate-types-52:2.16.2")

엔티티

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@TypeDef(name = "json", typeClass = JsonType.class). -> 이거를 추가해주고
public class Member extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_seq")
    private Long seq;

		...
				
		// 이렇게 하면 json을 사용가능하다. - 그리고 객체로 받기 때문에 쉽게 객체를 사용할 수 있다.
    @Type(type = "json")
    @Column(columnDefinition = "json")
    private List<Book> books;

		...

그리고 기존의 요청과 똑같이 하면 된다.

POST {{host_api}}/...
Content-Type: application/json

{
  ...
  "books": [
    {
      "title": "sdf",
      "price": 100
    },
    {
      "title": "sdf",
      "price": 100
    }
  ]
}

위와 같이 잘 들어가는것을 볼 수 있고

조회도 잘 되는것을 볼 수 있다.