[jackson] json serialize 시 상위클래스 필드 무시하기 :: 소림사의 홍반장!

rest api response로 객체를 json으로 변환하는데 가끔 상속받은 객체의 필드명과 다르게 반환해야 하는 경우들이 있다.


이런 경우 쓸 수 있는 팁. 

@JsonIgnore 활용 getter method 생성.



public class SuperClass implements Serializable {

private static final long serialVersionUID = -4657230387423033313L;

protected String superA;
protected String superB;

public String getSuperA() {
return superA;
}

public void setSuperA(String superA) {
this.superA = superA;
}

public String getSuperB() {
return superB;
}

public void setSuperB(String superB) {
this.superB = superB;
}
}
public class SubClass extends SuperClass {

private static final long serialVersionUID = -7437399855688896955L;

private String subA;
private String subB;

public String getSubA() {
return subA;
}

public void setSubA(String subA) {
this.subA = subA;
}

public String getSubB() {
return subB;
}

public void setSubB(String subB) {
this.subB = subB;
}
}


자 이런 클래스가 있고 이 SubClass의 데이터를 그대로 json serialize 하면 

@Test
public void name() throws JsonProcessingException {

SubClass subClass = new SubClass();

subClass.setSuperA("superA");
subClass.setSuperB("superB");
subClass.setSubA("subA");
subClass.setSubB("subB");

String json = new ObjectMapper().writeValueAsString(subClass);

Assertions.assertThat(json)
.isEqualTo("{\"superA\":\"superA\",\"superB\":\"superB\",\"subA\":\"subA\",\"subB\":\"subB\"}");
}


위의 테스트처럼  {"superA":"superA","superB":"superB","subA":"subA","subB":"subB"}  이런 결과나올것이다.


그런데 이 반환값을 


{"superBmodify":"superB","subAmodify":"subA"}


이렇게 바꾸고 싶다면?


public class SubClass extends SuperClass {

private static final long serialVersionUID = -7437399855688896955L;

private String subA;
private String subB;

@JsonIgnore
@Override public String getSuperA() {
return super.getSuperA();
}

@JsonIgnore
@Override public String getSuperB() {
return super.getSuperB();
}

public String getSuperBmodify() {
return super.getSuperB();
}

public String getSubAmodify() {
return subA;
}

public void setSubA(String subA) {
this.subA = subA;
}

@JsonIgnore
public String getSubB() {
return subB;
}

public void setSubB(String subB) {
this.subB = subB;
}
}

이렇게 상위클래스의 getter method를 오버라이딩하여 @JsonIgnore를 사용할 수 있다.



다른 카테고리의 글 목록

Dev. 자바/참고소스 카테고리의 포스트를 톺아봅니다