mongo db

[Spring] Jackson 라이브러리로 데이터 필터링하기

nan2 2022. 10. 19. 10:23
반응형

 

@JsonIgnore, @JsonIgnorePropertise
- 컨트롤러와 서비스에 모든 데이터가 존재하지만 단순히 사용자에게 데이터의 노출유무만 제어 가능

사용법
- 클래스의 필드에서 숨기고 싶은 필드에 @JsonIgnore 붙여줌

- 클래스 상단에 배열 형식으로 숨기고 싶은 필드를 입력해줌

@JsonIgnoreProperties({"필드명", "필드명", ...})



@JsonFilter
- 사용자에 따라 데이터를 필터링하여 json 형태로 보낼때 사용하는 어노테이션

사용법
1. 클래스 상단에 @JsonFilter("필터명") 지정해줌 -> 나중에 필터를 불러올때 지정한 이름으로 불러오게됨

@JsonFilter("UserInfo")
class User{
    private long id;
    private String name;
    private String password;
    private Date joinDate;
}

 

2. SimpleFilterProvider 객체를 new 로 생성하고, addFilter() 메서드를 이용하여 위에서 만든 필터를 추가해준다.

// SimpleFilterProvider 객체 생성
SimpleFilterProvider filterProvider = new SimpleFilterProvider();

// filter 추가 & 데이터 제어
filterProvider.addFilter("UserInfo", SimpleBeanPropertyFilter.serializeAllExcept("id", "password"));

※ SimpleBeanPropertyFilter의 serializeAllExcept()와 filterOutAllExcept() 를 통해서 필드(데이터)를 필터링 할수있음.
- serializeAllExcept(): 여기에서 지정한 데이터 제외한 모든 데이터가 직렬화되어 보여지게됨
- filterOutAllExcept(): 여기에서 지정한 데이터만 직렬화되어 보여지게됨
- serializeAll(): 모든 속성을 직렬화하고 아무것도 필터링하지 않음

 

3. ObjectMapper의 setFilterProvider() 를 사용하여 SimpleFilterProvider 객체를 ObjectMapper로 설정해준다.

ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filterProvider);


4. User 클래스의 객체 직렬화한다.

User user = new User(1, "Elena", new Date(), "zxcasd123", "901010-2222222");

String jsonData = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(jsonData);



참조사이트: https://www.concretepage.com/jackson-api/jackson-jsonfilter-example

반응형