[Spring] API, Response 데이터 제어를 위한 Filtering

홍정완·2022년 3월 30일
0

Spring

목록 보기
9/32
post-thumbnail
post-custom-banner

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;

}
profile
습관이 전부다.
post-custom-banner

0개의 댓글