[REST API] REST API의 동적 필터링 구현하기

민지·2024년 3월 18일
0

REST API - Spring Boot

목록 보기
21/27
post-custom-banner

구현할 것

앞선 포스팅에서 언급했던, 동적 필터링이란 무엇일까?
정적 필터링과 달리, 같은 빈이라도 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를 이용할 것이다.

동적 필터링 구현

/restfulwebservices/filtering/FilteringController.java modified

@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를 생성해야 한다.

SomeBean - @JsonFilter로 앞서 컨트롤러에 정의한 customizedBeanFilter를 표시해줘야 함

//@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/

profile
배운 내용을 바로바로 기록하자!
post-custom-banner

0개의 댓글