SlideShare a Scribd company logo
JACKSON ANNOTATION
(JSON 변환)
@JsonProperty , @JsonIgnore
@JsonAnyGetter, @JsonAnySetter
@JsonGetter, @JsonSetter
@JsonAutoDetect, @JsonInclude
@JsonUnwrapped
작성자 : 이종철, 탑크리에듀(topcredu.co.kr)
@JsonProperty : JSON으로 변환시 속성이름 변경
public class Emp {
@JsonProperty(“name”)
public String ename;
}
{ “name” : “SMITH” }
@JsonIgnore : JSON으로 변환시 무시한다.
public class Emp {
@JsonProperty(“name”)
public String ename;
@JsonIgnore
public int sal;
}
{ “name” : “SMITH” }
public class Emp {
public String ename;
private Map<String, String>
properties;
@JsonAnyGetter
public Map<String, String>
getProperties() {
return properties;
}
}
@Test
public void test() throws JsonProcessingException {
Emp emp = new Emp(“SMITH");
emp.add(“key1", "val1");
emp.add(“key2", "val2");
String result = new
ObjectMapper().writeValueAsString(emp);
assertThat(result, containsString(“key1"));
assertThat(result, containsString("val1"));
}
{
“ename":“SMITH",
“key2":"val2",
“key1":"val1"
}
@JsonAnyGetter : Map 타입필드에 대해 JSON
변환시 key, value를 일반속성처럼 변환 시켜준다.
public class Emp {
public String ename;
private Map<String, String> properties;
@JsonAnySetter
public void add(String key, String value)
{
return properties.put(key, value);
}
}
@Test
public void test() throws JsonProcessingException,
IOException {
String json =
"{“ename":“SMITH",“key2":"val2",“key1":"val1"}";
Emp emp = new
ObjectMapper().readerFor(Emp.class).readValue(json);
assertEquals(“SMITH", emp.ename);
assertEquals("val2",
emp.getProperties().get(“key2"));}
{
“ename":“SMITH",
“key2":"val2",
“key1":"val1"
}
@JsonAnySetter : 역직렬화시 JSON 속성을 map 필드에
대해 적용한다.
 @JsonGetter : Jackson에게 어떤 필드의 값에 대해 필드로 다이렉트 접근해서
가지고 오지말고 기술한 메소드의 게터 메소드로 접근해서 가지고 오라고 알린
다.
 @JsonSetter : 역직렬화시 JSON 속성을 필드에 할당하기 위해 어떤 필드의 세터
임을 지정한다.
public class Emp {
private long empno = 9999;
@JsonGetter(“empno")
public long empno() { return this.empno; }
@JsonSetter(“empno")
public void empno(long personId) { this.empno = empno; }
}
{“empno":9999}
@JsonAutoDetect : 어떤 필드/메소드를 JSON으로 변환할지를
지정한다. Visibility는 ANY, DEFAULT, NON_PRIVATE, NONE,
PROTECTED_AND_PRIVATE, PUBLIC_ONLY 값을 가진다.
// 필드는 JSON으로 변환하지 말고 public getter method 만 JSON으로 변환하라는 의미
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.PUBLIC_ONLY)
//모든 필드를 변환
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY )
public class Emp {
private long empno = 7369;
public String ename = “SMITH”;
}
 @JsonInclude : Jackson에게 필드값 존재 유무에 따라 JSON 출력시 포
함할 지의 여부를 지정한다.
 ALWAYS : 속성의 값에 의존하지 말고 항상 포함해라
 NOT_EMPTY : NULL 또는 값이빈 경우가 아니면 포함해라
 NOT_NULL : 널이아니면 포함해라.
 NON_DEFAULT : 빈의 기본생성자로 정의된 필드값과 다르게 변경된 필드만 포함해라
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Emp {
public long empno = 9999;
public String ename = null;
}
{ “empno” : 9999}
@JsonUnwrapped : Jackson에게 어떤 필드의 값
에 대해 싸지 말고 풀어헤쳐 달라는 의미.
public class Emp {
public int age;
public Ename ename;
}
public class Ename {
public String first, last;
}
{
"age" : 18,
“ename" : {
"first" : “JongCheol",
"last" : “Lee"
}
}
public class Emp {
public int age;
@JsonUnwrapped
public Ename ename;
}
public class Ename {
public String first, last;
}
{
"age" : 18,
"first" : “JongCheol",
"last" : “Lee"
}
}

More Related Content

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
 
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 
2. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part22. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part2
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
 

Recently uploaded

INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
ahghwo99
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
cho9759
 

Recently uploaded (7)

INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 

Jackson annotation, JSON 직렬화,역직렬화와 관련된 어노테이션_자바/스프링/시큐리티/소셜/JPA 실무전문교육

  • 1. JACKSON ANNOTATION (JSON 변환) @JsonProperty , @JsonIgnore @JsonAnyGetter, @JsonAnySetter @JsonGetter, @JsonSetter @JsonAutoDetect, @JsonInclude @JsonUnwrapped 작성자 : 이종철, 탑크리에듀(topcredu.co.kr)
  • 2. @JsonProperty : JSON으로 변환시 속성이름 변경 public class Emp { @JsonProperty(“name”) public String ename; } { “name” : “SMITH” }
  • 3. @JsonIgnore : JSON으로 변환시 무시한다. public class Emp { @JsonProperty(“name”) public String ename; @JsonIgnore public int sal; } { “name” : “SMITH” }
  • 4. public class Emp { public String ename; private Map<String, String> properties; @JsonAnyGetter public Map<String, String> getProperties() { return properties; } } @Test public void test() throws JsonProcessingException { Emp emp = new Emp(“SMITH"); emp.add(“key1", "val1"); emp.add(“key2", "val2"); String result = new ObjectMapper().writeValueAsString(emp); assertThat(result, containsString(“key1")); assertThat(result, containsString("val1")); } { “ename":“SMITH", “key2":"val2", “key1":"val1" } @JsonAnyGetter : Map 타입필드에 대해 JSON 변환시 key, value를 일반속성처럼 변환 시켜준다.
  • 5. public class Emp { public String ename; private Map<String, String> properties; @JsonAnySetter public void add(String key, String value) { return properties.put(key, value); } } @Test public void test() throws JsonProcessingException, IOException { String json = "{“ename":“SMITH",“key2":"val2",“key1":"val1"}"; Emp emp = new ObjectMapper().readerFor(Emp.class).readValue(json); assertEquals(“SMITH", emp.ename); assertEquals("val2", emp.getProperties().get(“key2"));} { “ename":“SMITH", “key2":"val2", “key1":"val1" } @JsonAnySetter : 역직렬화시 JSON 속성을 map 필드에 대해 적용한다.
  • 6.  @JsonGetter : Jackson에게 어떤 필드의 값에 대해 필드로 다이렉트 접근해서 가지고 오지말고 기술한 메소드의 게터 메소드로 접근해서 가지고 오라고 알린 다.  @JsonSetter : 역직렬화시 JSON 속성을 필드에 할당하기 위해 어떤 필드의 세터 임을 지정한다. public class Emp { private long empno = 9999; @JsonGetter(“empno") public long empno() { return this.empno; } @JsonSetter(“empno") public void empno(long personId) { this.empno = empno; } } {“empno":9999}
  • 7. @JsonAutoDetect : 어떤 필드/메소드를 JSON으로 변환할지를 지정한다. Visibility는 ANY, DEFAULT, NON_PRIVATE, NONE, PROTECTED_AND_PRIVATE, PUBLIC_ONLY 값을 가진다. // 필드는 JSON으로 변환하지 말고 public getter method 만 JSON으로 변환하라는 의미 @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.PUBLIC_ONLY) //모든 필드를 변환 @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY ) public class Emp { private long empno = 7369; public String ename = “SMITH”; }
  • 8.  @JsonInclude : Jackson에게 필드값 존재 유무에 따라 JSON 출력시 포 함할 지의 여부를 지정한다.  ALWAYS : 속성의 값에 의존하지 말고 항상 포함해라  NOT_EMPTY : NULL 또는 값이빈 경우가 아니면 포함해라  NOT_NULL : 널이아니면 포함해라.  NON_DEFAULT : 빈의 기본생성자로 정의된 필드값과 다르게 변경된 필드만 포함해라 @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Emp { public long empno = 9999; public String ename = null; } { “empno” : 9999}
  • 9. @JsonUnwrapped : Jackson에게 어떤 필드의 값 에 대해 싸지 말고 풀어헤쳐 달라는 의미. public class Emp { public int age; public Ename ename; } public class Ename { public String first, last; } { "age" : 18, “ename" : { "first" : “JongCheol", "last" : “Lee" } } public class Emp { public int age; @JsonUnwrapped public Ename ename; } public class Ename { public String first, last; } { "age" : 18, "first" : “JongCheol", "last" : “Lee" } }