728x90
/* 사용 이유 */
클라이언트에게 보내면 위험한 데이터가 있다. 따라서 @JsonIgnore, @JsonIgnoreProperties 아니면 @JsonFilter를 이용해 클라이언트에 데이터를 보낼 시 필터링 작업을 거칠 수 있다.
/* 방법 1. @JsonIgnore - field2 가리기*/
public class SomeBean{
private String field1;
@JsonIgnore
private String field2;
private String field3;
public SomeBean(String field1, String field2, String field3){
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
/* 방법 2. @JsonProperties - field2 가리기*/
@JsonIgnoreProperties({"field2"})
public class SomeBean{
private String field1;
private String field2;
private String field3;
public SomeBean(String field1, String field2, String field3){
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
만약 field1도 Json형식으로 만들고 싶지 않다면 @JsonIgnoreProperties({"field1","field2"}) 와 같이 쓸 수 있다.
/* 방법 3. @JsonFilter - field2 가리기*/
@JsonFilter("SomeBeanFilter")
public class SomeBean{
private String field1;
private String field2;
private String field3;
public SomeBean(String field1, String field2, String field3){
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
@GetMapping("/filtering")
public MappingJacksonValue filtering(){
SomeBean someBean = new SomeBean("value1", "value2", "value3");
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3");
FilterProvider filters = new SimpleFilterProvider()
.addFilter("SomeBeanFilter",filter);
mappingJacksonValue.setFilters(filters);
return mappingJacksonValue;
}
@JsonFilter를 통해 필터링을 할 때 참조할 이름을 정해놓는다
컨트롤러 클래스 안에서 어느 필드를 필터링 할건지는 MappingJacksonValue를 리턴값으로 삼아서 FilterProvider를 set한다.
728x90
'백엔드' 카테고리의 다른 글
[Docker] 도커란 무엇인가 (0) | 2024.03.25 |
---|---|
[Spring Boot] RESTAPI - 예외처리 (1) | 2024.01.11 |
[Spring Boot] RestAPI - ResponseEntity, Hateoas (1) | 2024.01.04 |
[Spring Boot] 메시지 국제화 (Internationalization) (0) | 2024.01.02 |
[Spring Boot] @Validation 유효성 (0) | 2023.12.17 |