Jackson Annotation
- Jackson은 json 라이브러리입니다.
- json뿐만아니라 xml, yaml 등 다양한 형식의 데이터도 지원한다.
- Spring API서버에서 거의 필수적으로 사용되기때문에 한번 정리해봤다.
- Spring 3.2버전부터 jackson 라이브러리가 지원된다. (따로 dependency 안받아도 됨)
Jackson Annotation 사용법 정리글
5. Jackson General Annotation
5.1 @JsonProperty
- 속성 이름을 나타낼때 사용된다.
- 필드, 메서드, 매개변수에 사용가능
public class MyBean {
public int id;
@JsonProperty("name")
private String theName;
}
// 적용 전
{
"id": 1,
"theName": "chan"
}
// 적용 후
{
"id": 1,
"name": "chan"
}
5.2 @JsonFormat
- Date/Time값을 format지정할때 사용한다.
- 필드, 메서드, 매개변수, 클래스에 사용 가능
public class EventWithFormat {
public String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
public Date eventDate;
}
// 적용 전
{
"name":"chan",
"eventDate":1576402091000
}
// 적용 후
{
"name":"chan",
"eventDate":"2019-12-15 18:28:11"
}
5.3 @JsonUnwrapped
- 직렬화나 역직렬화 할때 unwrapped/flattened 할 수 있다.
- @JsonAnyGetter와 비슷하나 POJO(Object)에 사용 해야 적용된다.
- 필드, 메서드, 매개변수에 사용 가능
public class UnwrappedUser {
public int id;
@JsonUnwrapped
public Name name;
public static class Name {
public String firstName;
public String lastName;
}
}
// 적용 전
{
"id":1,
"name":{
"firstName":"John",
"lastName":"Doe"
}
}
// 적용 후
{
"id":1,
"firstName":"chan",
"lastName":"kim"
}
5.4 @JsonView
- 직렬화나 역직렬화 할때 포함될 속성을 동적으로 가능하게 한다.
- 클래스, 메서드, 매개변수, 필드에 사용가능
// 뷰 설정
public class Views {
public static class Public {}
public static class Internal extends Public {}
}
public class Item {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String itemName;
@JsonView(Views.Internal.class)
public String ownerName;
}
// Internal의 view가 적용될 때
{
"id":2,
"itemName":"book",
"ownerName":"chan"
}
// Public의 view가 적용될 때
{
"id":2,
"itemName":"book"
}
5.5 @JsonManagedReference, @JsonBackReference
- 부모,자식 관계나 순환참조할 경우 사용된다.
- 필드나 메서드에 사용 가능
public class ItemWithRef {
public int id;
public String itemName;
@JsonManagedReference
public UserWithRef owner;
public ItemWithRef(int id, String itemName, UserWithRef owner) {
this.id = id;
this.itemName = itemName;
this.owner = owner;
}
}
public class UserWithRef {
public int id;
public String name;
@JsonBackReference
public List<ItemWithRef> itemWithRefs = new ArrayList<>();
public UserWithRef(int id, String name) {
this.id = id;
this.name = name;
}
public void addItem(ItemWithRef item) {
itemWithRefs.add(item);
}
}
{
"id":2,
"itemName":"book",
"owner":{
"id":1,
"name":"chan"
}
}
5.4 @JsonFilter
- 직렬화 하는 도중 필터링할때 사용 한다.
- SimpleFilterProvider 객체를 사용
- 클래스, 메서드, 매개변수, 필드에 사용가능
@JsonFilter("myFilter")
public class BeanWithFilter {
public int id;
public String name;
}
{
"name":"chan"
}
참고 + 출처
- Jackson tutorial 참고
- Yun Blog 참고