반응형
json을 자바 객체로 역직렬화 할때, json에 담긴 key이름과 변수명이 다른 문제로 @JsonProperty를 많이 사용하는 것 같다.
예를 들면, 아래와 같은 Blog 클래스가 있다고 하자.
public class Blog {
private String userName;
private String blogLink;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setBlogLink(String blogLink) {
this.blogLink = blogLink;
}
public String getBlogLink() {
return blogLink;
}
}
setter 메소드를 이용해 각각 이름과 링크에 '연로그', 'yeonyeon.tistory.com/'를 입력한 뒤, JSON화 시켰다고 가정하자.
그러면 결과는 다음과 같을 것이다.
{"userName":"연로그", "blogLink":"http://yeonyeon.tistory.com/"}
하지만 만약, 아래 같이 userName이 아닌 user_name으로, blogLink가 아닌 blog_link로 받고 싶다면?
{"user_name":"연로그", "blog_link":"http://yeonyeon.tistory.com/"}
이럴 때 @JsonProperty를 사용해주면 된다.
public class Blog {
@JsonProperty("user_name")
private String userName;
@JsonProperty("blog_link")
private String blogLink;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setBlogLink(String blogLink) {
this.blogLink = blogLink;
}
public String getBlogLink() {
return blogLink;
}
}
결과 확인을 위한 테스트 코드
public static void main (String[] args) {
ObjectMapper mapper = new ObjectMapper();
Blog blog = new Blog();
blog.setUserName("연로그");
blog.setBlogLink("yeonyeon.tistory.com");
try {
System.out.println(mapper.writeValueAsString(blog));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
만약 @JsonProperty가 적용되지 않는 문제를 겪는다면, import를 잘 살펴봐야 한다.
import com.fasterxml.jackson.annotation.JsonProperty; // 원래 import 해야하는 것
import org.codehaus.jackson.annotate.JsonProperty; // 내가 import 했던 것 (에러)
결론
- @JsonProperty는 JSON 직렬화 시 설정할 수 있는 이름을 지정하는 어노테이션이다.
위 예시에서는 변수 선언 시 어노테이션을 적용했지만, 변수에만 적용할 수 있는 것은 아니다.
getter / setter 메소드에 어노테이션을 적용하기도 한다.
이 부분에 대해서는 아직 차이점을 찾지 못했다....
참고
개념 설명: pjh3749.tistory.com/281
반응형
'Develop > Spring+JPA' 카테고리의 다른 글
[Spring] Path with "WEB-INF" or "META-INF" 에러 (2) | 2021.05.21 |
---|---|
[Spring] Initializr로 스프링 부트 기반 프로젝트 생성 (0) | 2021.03.10 |
[Spring] HiddenHttpMethodFilter (0) | 2021.02.04 |
[Spring] web.xml 분석하기 (0) | 2021.02.03 |
[Spring] Interceptor (0) | 2021.01.29 |