본문 바로가기

백엔드

[Spring Boot] JsonIgnore, JsonIgnoreProperty, JsonFilter

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