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. 자바 > 참고소스' 카테고리의 다른 글
카운트 증가 로직 성능 향상을 위한 방법 (0) | 2019.09.26 |
---|---|
[jackson] json serialize 만 ignore 하고 싶다면? (1) | 2019.01.25 |
[spring - mybatis tip] MyBatis(iBatis)에서 Java Enum code custom typeHandler 사용하기 (1) | 2017.07.06 |
[java 팁] split - pipeline(|)을 구분자로 문자열 쪼갤때 주의 (1) | 2014.06.11 |
[reflection] 클래스(Class) 의 필드명, 값 map으로 가져오기 (0) | 2014.05.08 |