@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
'mongo db' 카테고리의 다른 글
[MongoDB] update 쿼리 만들기(Aggregation) (0) | 2023.01.02 |
---|---|
[MongoDB] findOneAndUpdate 사용법 (0) | 2022.12.28 |
[MongoDB] 기본적인 쿼리(DB, Collection, Document) (0) | 2022.10.25 |