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"
}
참고 + 출처
chanhee.kim's profile image

chanhee.kim

2019-12-15 18:22

Read more posts by this author