Spring/Spring Boot

Rest API 동적 필터링

hoonssss 2023. 10. 6. 10:31
반응형
SMALL
package com.in28minutes.rest.webservices.restfulwebservices.filtering;

import java.util.ArrayList;

import java.util.Arrays;
import java.util.List;

import org.hibernate.annotations.DialectOverride.Filters;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

@RestController
public class FilteringController {

	@GetMapping("/filtering")
	public MappingJacksonValue filtering() {
		SomeBean someBean = new SomeBean("value1", "value2", "value3");
		
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
		SimpleBeanPropertyFilter Filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3"); //2 안나옴
		FilterProvider filters = new SimpleFilterProvider().addFilter("SomeBeanFilter",Filter);
		mappingJacksonValue.setFilters(filters);
		
		return mappingJacksonValue;
	}

	@GetMapping("/filtering-list")
	public MappingJacksonValue JacksonValue () {
		List<SomeBean> list = Arrays.asList(new SomeBean("value1", "value2", "value3"), 
											new SomeBean("value4", "value5", "value6"));
		
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(list);
		SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("filed2","filed3");
		FilterProvider filters = new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
		mappingJacksonValue.setFilters(filters);
		
		return mappingJacksonValue;
	}
}
package com.in28minutes.rest.webservices.restfulwebservices.filtering;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

//@JsonIgnoreProperties({"field1","field2"}) //정적필터링
@JsonFilter("SomeBeanFilter")
public class SomeBean {
	
	private String field1;
	
	//@JsonIgnore //정적필터링
	private String field2;
	
	private String field3;
	
	public SomeBean(String field1, String field2, String field3) {
		super();
		this.field1 = field1;
		this.field2 = field2;
		this.field3 = field3;
	}
	
	public String getField1() {
		return field1;
	}

	public void setField1(String field1) {
		this.field1 = field1;
	}

	public String getField2() {
		return field2;
	}

	public void setField2(String field2) {
		this.field2 = field2;
	}

	public String getField3() {
		return field3;
	}

	public void setField3(String field3) {
		this.field3 = field3;
	}

	@Override
	public String toString() {
		return "SomeBean [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + "]";
	}
}
반응형
LIST

'Spring > Spring Boot' 카테고리의 다른 글

User @Entity, @id, @GeneratedValue 적용  (0) 2023.10.06
Actuator로 API 모니터링/HAL explorer로 API 탐색  (0) 2023.10.06
REST API 버전 관리 (params, headers, produces)  (0) 2023.10.05
name, password 구현  (0) 2023.09.21
logging  (0) 2023.09.21