자 json으로 프론트에 데이터를 보내고자 한다. 이때 controller를 작성하고 이를 위한 class 를 작성하는데 데이터를 보낼 때 다음과 같이 클래스를 작성했다고 해보자
@Builder(toBuilder =true)
@NoArgsConstructor
@Getter
@Entity
@Table(name="Stuend")
public class Student{
@JsonProperty("name")
private String name;
@JsonProperty("age")
private String age;
@JsonProperty("weight")
private Double weight;
}
준비는 완벽하다! 그래서 db에서 이름, 나이 그리고 몸무게를 json형식으로 반환하는 컨트롤러를 작성했다. 그런데 갑자기 이름과 나이만 반환하는 컨트롤러도 작성해야할 필요가 있다고 하자. Table도 같고 단지 weight만 반환하지 않는다고 한다면 어떻게 해야 할까?
이전 아무것도 모르는 초보 개발자일 때는 둘다 정의 했다.
@Builder(toBuilder =true)
@NoArgsConstructor
@Getter
@Entity
@Table(name="Stuend")
public class Student{
@JsonProperty("name")
private String name;
@JsonProperty("age")
private String age;
@JsonProperty("weight")
private Double weight;
}
@Builder(toBuilder =true)
@NoArgsConstructor
@Getter
@Entity
@Table(name="Stuend")
public class StudentWithoutWeight{
@JsonProperty("name")
private String name;
@JsonProperty("age")
private String age;
}
넘 비효율 적이다.
근데 최근에 @JsonInclude 어노테이션을 알게 되었다.
@Builder(toBuilder =true)
@NoArgsConstructor
@Getter
@Entity
@Table(name="Stuend")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Student{
@JsonProperty("name")
private String name;
@JsonProperty("age")
private String age;
@JsonProperty("weight")
private Double weight;
}
이거면 value가 null이면 json에서 제외가 된다는 것이다! 대박사건