반응형
@JsonProperty는 Entity를 Json형태로 직렬화하는 경우 속성의 이름을 설정할 수 있도록 도와주는 어노테이션이다.
이를 통해 백엔드와 프론트엔드간 엔터티 필드명 불일치를 해결할 수 있다.
예시로 아래와 같은 Board Entity 파일이 백엔드에 정의되어 있다고 가정해 보자.
public class Board extends BaseTimeEntity {
...
@Column(name = "post_view", nullable = false)
private Integer postView = 0;
@Column(name = "pinned", nullable = false)
private Boolean pinned = false;
@Column(length = 255)
private String filename;
...
}
이를 Json으로 직렬화하면 아래와 같이 변환될 것이다.
{"post_view":0, "pinned": false, "filename": ""}
하지만 만약 프론트단에서 Board 엔터티에 대한 인터페이스를 아래와 같이 정의했다면
views 필드에 대한 필드명 불일치 문제가 발생한다.
작은 프로젝트라면 큰 문제가 되지 않겠지만, 어느정도 규모가 있는 프로젝트에서 views와 관련된 모든 코드를 고치는 것은 사이드 이펙트가 굉장히 커진다.
export interface Board {
...
views: number;
pinned: boolean;
filename?: string | null;
...
}
따라서 이 필드와 관련 코드를 모두 수정하는 대신 @JsonProperty 어노테이션으로 필드명 위에 "직렬화 시 속성의 이름을 명시"해주면 별도로 코드를 수정하지 않아도 된다.
public class Board extends BaseTimeEntity {
...
@JsonProperty("views") // <--
@Column(name = "post_view", nullable = false)
private Integer postView = 0;
@Column(name = "pinned", nullable = false)
private Boolean pinned = false;
@Column(length = 255)
private String filename;
...
}
{"view":0, "pinned": false, "filename": ""}
// JsonProperty 어노테이션에 따라서 post_view가 아닌 view로 직렬화반응형
'🌱 Spring Framework > Spring Framework' 카테고리의 다른 글
| [DB] Mac H2 Database 연동 및 설치 방법 정리 (1) | 2024.03.29 |
|---|---|
| [Spring] 정적 페이지 & MVC 렌더링 방식 (0) | 2024.03.24 |