[Spring] Response 데이터 제어를 위한 Filtering 📑
Filtering
👉 중요한 데이터를 클라이언트에게 바로 노출하지 않기 위해 사용
annotation을 활용한 Filtering
- @JsonIgnore 이용 👉 개별적 annotation 적용
@Data
@AllArgsConstructor
public class User {
private Integer id;
@Size(min=2, message = "Name은 2글자 이상 입력해 주세요.")
private String name; // 과거 데이터 제약 조건
@Past
private Date joinDate; // 중요한 데이터
@JsonIgnore
private String password;
@JsonIgnore
private String ssn;
}
- @JsonIgnoreProperties 이용 👉 Class에 annotation 적용
@Data
@AllArgsConstructor
@JsonIgnoreProperties(value={"password","ssn"}) //클래스 블록에 추가
public class User {
private Integer id;
@Size(min=2, message = "Name은 2글자 이상 입력해 주세요.")
private String name;
@Past
private Date joinDate;
private String password;
private String ssn;
}
@JsonFilter() 이용 👉 admin 개별 사용자 조회
// User Class
@Data
@AllArgsConstructor
@JsonFilter("UserInfo")
// Controller, Service 클래스에서 사용
// Filter ID를 문자열로 지정하며, 이 어노테이션 사용 시에는 무조건
// FilterProvider와 해당 ID를 처리하는 필터를 제공해야 함
public class User {
private Integer id;
@Size(min=2, message = "Name은 2글자 이상 입력해 주세요.")
private String name;
@Past
private Date joinDate;
private String password;
private String ssn;
}
// AdminUserController Class
// 개별 사용자 조회
@GetMapping("admin/users/{id}")
public MappingJacksonValue retrieveUser(@PathVariable int id){
User user = service.findOne(id);
if(user==null){
throw new UserNotFoundException(String.format("ID[%s] not found", id));
}
// SimpleBeanPropertyFilter : 지정된 필드들만 JSON 변환하고, 알 수 없는 필드는 무시
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("id","name","joinDate","ssn");
FilterProvider filters = new SimpleFilterProvider().addFilter("UserInfo",filter);
MappingJacksonValue mapping = new MappingJacksonValue(user);
mapping.setFilters(filters);
return mapping;
}
Author And Source
이 문제에 관하여([Spring] Response 데이터 제어를 위한 Filtering 📑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daydream/Spring-Response-데이터-제어를-위한-Filtering저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)