Jackson 어노테이션 사용법(2)

Jackson Deserialization Annotations

Posted by Yun on 2018-06-01

Jackson Deserialization Annotations

  • Jackson Annotation Examples 예제를 적용전, 적용후로 나누어서 정리 해봤습니다.
  • 테스트코드도 참고하시면 좋습니다.
  • 해당 코드는 Github를 참고해주세요

@JsonCreator

  • JSON key 와 멤버 필드의 이름이 일치하지 않을 경우 사용합니다.
1
2
3
4
{
"id":1,
"theName":"My bean"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public static class BeanWithCreator {
public int id;
public String name;

@JsonCreator
public BeanWithCreator(
@JsonProperty("id") int id,
@JsonProperty("theName") String name
) {
this.id = id;
this.name = name;
}
}

@JacksonInject

  • JSON 데이터가 아닌 값을 주입하는데 사용됩니다.
1
2
3
{
"name": "My bean"
}
1
2
3
4
5
6
public static class BeanWithInject {
@JacksonInject
public int id;

public String name;
}

@JsonAnySetter

  • Map을 이용해서 유연성있게 Deserialization 합니다.
1
2
3
4
5
{
"name": "My bean",
"attr2": "val2",
"attr1": "val1"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static class ExtendableBean {
public String name;
private Map<String, String> properties = new HashMap<>();


@JsonAnySetter
public void setProperties(String key, String value) {
properties.put(key, value);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}


public Map<String, String> getProperties() {
return properties;
}
}

@JsonSetter

  • 객체와 맴버필드와 일치하지 않을 경우 유용하게 사용할 수 있습니다.
1
2
3
4
{
"id": 1,
"name": "My bean"å
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public static class MyBean {
public int id;
private String name;

@JsonSetter("name")
public void setTheName(String name) {
this.name = name;
}

public String getTheName() {
return this.name;
}
}