Serialization(직렬화) : object -> Stream 전환해주는 프로세스 (JSON)
customizing the REST API response, by Jackson framework!
@JSONProperty
@Size(min = 2, message = "Name should have atleast 2 characters")
@JsonProperty("customized_userName")
private String name;
@Past(message = "Birth Date should be in the past")
@JsonProperty("customized_birthDate")
private LocalDate birthDate;
@JsonIgnoreProperties
, @JsonIgnore
@JsonFilter with FilterProvider
예를 들어, SomeBean의 field2가 비밀번호이고, REST API의 response에 이를 반환하고 싶지 않다면, 해당 필드를 필터링 대상으로 지정할 수 있다.
@RestController
public class FilteringController {
@GetMapping("/filtering")
public SomeBean filtering() {
return new SomeBean("value1", "value2", "value3");
}
}
SomeBean - field2에 @JsonIgnore 추가
public class SomeBean {
public String field1;
@JsonIgnore
public String field2;
public String field3;
public SomeBean(String field1, String field2, String field3) {
super();
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
public String getField1() {
return field1;
}
public String getField2() {
return field2;
}
public String getField3() {
return field3;
}
@Override
public String toString() {
return "SomeBean [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + "]";
}
}
실행결과,
list를 추가해도, 여전히 @JsonIgnore
을 통해, "field2" 값만 JSON 응답에서 무시된다.
@RestController
public class FilteringController {
@GetMapping("/filtering")
public SomeBean filtering() {
return new SomeBean("value1", "value2", "value3");
}
@GetMapping("/filtering-list")
public List<SomeBean> filteringList() {
return Arrays.asList(new SomeBean("value1", "value2", "value3"),
new SomeBean("value4", "value5", "value6"));
}
}
혹은 위의 @JsonIgnore과 같이, @JsonIgnoreProperties
는 클래스에 지정해, field1과 field2를 JSON 응답에서 모두 무시할 수 있다.
@JsonIgnoreProperties({ "field1", "field2" })
public class SomeBean {
public String field1;
// @JsonIgnore
public String field2;
public String field3;
.
.
.
// same codes
}
멤버변수에 붙이는 @JsonIgnore
과 클래스에 붙이는 @JsonIgnoreProperties
를 통해, 정적 필터링을 구현할 수 있었다.
개인적으로 @JsonIgnore 어노테이션이 더 사용하기 편리하다!
참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/