앞선 포스팅에서 언급했던, 동적 필터링이란 무엇일까?
정적 필터링과 달리, 같은 빈이라도 REST API에 따라 다른 property를 JSON response로 반환하고 싶을 때의 필터링이다.
예를 들어, filtering과 filtering-list라는 두 REST API가 있을 때, filtering REST API에서는 field1과 field2를 JSON response로 받고 싶다고 하자.
반면, filtering-list REST API에서는 field2와 field3을 JSON response로 받고 싶다고 하자.
위의 예시의 동적 필터링을 만들어보자
@JsonFilter with FilterProvider
를 이용할 것이다.
@GetMapping("/filtering")
public MappingJacksonValue filtering() {
SomeBean someBean = new SomeBean("value1", "value2", "value3");
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1", "field2");
FilterProvider filters = new SimpleFilterProvider().addFilter("customizedBeanFilter", filter);
mappingJacksonValue.setFilters(filters);
return mappingJacksonValue;
}
같은 방식으로 filteringList 함수
또한 수정!
-> field2와 field3만 JSON 응답을 받을 수 있게끔 필터링
@GetMapping("/filtering-list")
public MappingJacksonValue filteringList() {
List<SomeBean> list = Arrays.asList(new SomeBean("value1", "value2", "value3"),
new SomeBean("value4", "value5", "value6"));
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(list);
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("field2", "field3");
FilterProvider filters = new SimpleFilterProvider().addFilter("customizedBeanFilter", filter);
mappingJacksonValue.setFilters(filters);
return mappingJacksonValue;
}
MappingJacksonValue
클래스
Jackson 컨버터에 특정한 직렬화(serialization) 명령을 넘기고 싶을 때 사용
MappingJacksonValue 클래스 덕에, 필터 설정이 가능해졌다!
FilterProvider
클래스
적용할 filters를 정의할 FilterProvider를 생성해야 한다.
//@JsonIgnoreProperties({ "field1", "field2" })
@JsonFilter("customizedBeanFilter")
public class SomeBean {
public String field1;
// @JsonIgnore
public String field2;
public String field3;
.
.
// same code
}
실행결과,
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/