어찌보면 가장 중요한 Deserialization한 JsonString 형태를 파싱하는 방법이다.
Spring Boot에서 Deserialization 파싱을 위해 Jackson과 gson을 사용하면서 동시에 클래스를 생성하여 사용해야한다.
Spring boot Json 1편, 2편, 3편, 마지막
1. 2018/11/06 - [Spring Boot] - Spring Boot Json, JsonObject로 만들기 - JSON 1편
2. 2018/11/07 - [Develop/Spring Boot] - Spring Boot Json, Gson을 이용한 JsonObject to String, String to JsonObject- JSON 2편
3. 2018/11/09 - [Develop/Spring Boot] - Spring Boot Json, Jackson을 이용한 JsonParsing - Json 3편
4. 2018/11/13 - [Develop/Spring Boot] - Spring Boot Json, hashmap to json , JsonObject 만들기- JSON 마지막
번외 Database의 값을 Json으로 select하는 방법.
1. 2018/10/24 - [Spring Boot] - Spring boot jpa map, hashmap, JSON형식
2. 2018/10/28 - [Spring Boot] - Spring boot JPA EntityManager를 이용한 Map형식으로 mapping하기
Spring boot에서 MySQL JSON 타입 SELECT하는 방법
1. 2018/11/30 - [Develop/Spring Boot] - Spring boot MySQL JSON - MySQL JSON DATA TYPE 값 가져오기
1. Class를 생성하여 Gson을 이용한 Deserializaion한 JsonString to Object(JsonObject)
앞의 1편, 2편, 3편에 사용했던 TestDTO를 수정하자.
수정하기 전 먼저 Test_2DTO를 새로 생성한다
1
<code
class
=
"hljs typescript"
><span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-class"
><span
class
=
"hljs-keyword"
>
class
</span> <span
class
=
"hljs-title"
>Test_2DTO</span> </span>{ <span
class
=
"hljs-keyword"
>
private
</span> <span
class
=
"hljs-built_in"
>String</span> name; <span
class
=
"hljs-keyword"
>
private
</span>
int
age; <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>Test_2DTO</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-built_in"
>
super
</span>(); } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>Test_2DTO</span>(<span
class
=
"hljs-params"
><span
class
=
"hljs-built_in"
>String</span> name,
int
age</span>)</span> { <span
class
=
"hljs-built_in"
>
super
</span>(); <span
class
=
"hljs-built_in"
>
this
</span>.name = name; <span
class
=
"hljs-built_in"
>
this
</span>.age = age; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>String</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>getName</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> name; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>
void
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>setName</span>(<span
class
=
"hljs-params"
><span
class
=
"hljs-built_in"
>String</span> name</span>)</span> { <span
class
=
"hljs-built_in"
>
this
</span>.name = name; } <span
class
=
"hljs-keyword"
>
public
</span>
int
<span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>getAge</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> age; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>
void
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>setAge</span>(<span
class
=
"hljs-params"
>
int
age</span>)</span> { <span
class
=
"hljs-built_in"
>
this
</span>.age = age; } } </code>
1
<code
class
=
"hljs typescript"
><span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-class"
><span
class
=
"hljs-keyword"
>
class
</span> <span
class
=
"hljs-title"
>TestDTO</span> </span>{ <span
class
=
"hljs-keyword"
>
private
</span> Integer id; <span
class
=
"hljs-keyword"
>
private
</span> <span
class
=
"hljs-built_in"
>String</span> password; <span
class
=
"hljs-keyword"
>
private
</span> List details; <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>TestDTO</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-built_in"
>
super
</span>(); } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>TestDTO</span>(<span
class
=
"hljs-params"
>Integer id, <span
class
=
"hljs-built_in"
>String</span> password, List details</span>)</span> { <span
class
=
"hljs-built_in"
>
super
</span>(); <span
class
=
"hljs-built_in"
>
this
</span>.id = id; <span
class
=
"hljs-built_in"
>
this
</span>.password = password; <span
class
=
"hljs-built_in"
>
this
</span>.details = details; } <span
class
=
"hljs-keyword"
>
public
</span> Integer <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>getId</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> id; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>
void
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>setId</span>(<span
class
=
"hljs-params"
>Integer id</span>)</span> { <span
class
=
"hljs-built_in"
>
this
</span>.id = id; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>String</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>getPassword</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> password; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>
void
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>setPassword</span>(<span
class
=
"hljs-params"
><span
class
=
"hljs-built_in"
>String</span> password</span>)</span> { <span
class
=
"hljs-built_in"
>
this
</span>.password = password; } <span
class
=
"hljs-keyword"
>
public
</span> List <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>getDetails</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> details; } <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>
void
</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>setDetails</span>(<span
class
=
"hljs-params"
>List details</span>)</span> { <span
class
=
"hljs-built_in"
>
this
</span>.details = details; } <span
class
=
"hljs-meta"
>
@Override
</span> <span
class
=
"hljs-keyword"
>
public
</span> <span
class
=
"hljs-built_in"
>String</span> <span
class
=
"hljs-function"
><span
class
=
"hljs-title"
>toString</span>(<span
class
=
"hljs-params"
></span>)</span> { <span
class
=
"hljs-keyword"
>
return
</span> <span
class
=
"hljs-keyword"
>
new
</span> Gson().toJson(<span
class
=
"hljs-built_in"
>
this
</span>); } } </code>
생성했다면,
1
<code
class
=
"hljs swift"
><span
class
=
"hljs-keyword"
>
public
</span>
void
test() { <span
class
=
"hljs-type"
>String</span> jsonString <span
class
=
"hljs-operator"
>=</span> <span
class
=
"hljs-string"
>
"{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>id<span class="
hljs-subst
">\"</span>: 1,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>password<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>1234<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>details<span class="
hljs-subst
">\"</span>: [<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" {<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 20<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" },{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test2<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 21<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" }<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" ] <span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
"}"
</span>; <span
class
=
"hljs-type"
>Gson</span> gson <span
class
=
"hljs-operator"
>=</span>
new
<span
class
=
"hljs-type"
>Gson</span>(); <span
class
=
"hljs-type"
>TestDTO</span> t <span
class
=
"hljs-operator"
>=</span> gson.fromJson(jsonString, <span
class
=
"hljs-type"
>TestDTO</span>.
class
); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"id : "
</span> <span
class
=
"hljs-operator"
>+</span>t.getId()); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"password : "
</span><span
class
=
"hljs-operator"
>+</span>t.getPassword()); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"name1 : "
</span><span
class
=
"hljs-operator"
>+</span>t.getDetails().get(<span
class
=
"hljs-number"
>
0
</span>).getName()); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"age1: "
</span><span
class
=
"hljs-operator"
>+</span>t.getDetails().get(<span
class
=
"hljs-number"
>
0
</span>).getAge()); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"name2 : "
</span><span
class
=
"hljs-operator"
>+</span>t.getDetails().get(<span
class
=
"hljs-number"
>
1
</span>).getName()); <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"age2: "
</span><span
class
=
"hljs-operator"
>+</span>t.getDetails().get(<span
class
=
"hljs-number"
>
1
</span>).getAge()); } </code>
위에 사용한 Json내용이다.,
1
<
code
class
=
"hljs"
>{ <
span
class
=
"hljs-attr"
>"id"</
span
>: <
span
class
=
"hljs-number"
>1</
span
>, <
span
class
=
"hljs-attr"
>"password"</
span
>: <
span
class
=
"hljs-string"
>"1234"</
span
>, <
span
class
=
"hljs-attr"
>"details"</
span
>: [ { <
span
class
=
"hljs-attr"
>"name"</
span
>: <
span
class
=
"hljs-string"
>"test"</
span
>, <
span
class
=
"hljs-attr"
>"age"</
span
>: <
span
class
=
"hljs-number"
>20</
span
> },{ <
span
class
=
"hljs-attr"
>"name"</
span
>: <
span
class
=
"hljs-string"
>"test2"</
span
>, <
span
class
=
"hljs-attr"
>"age"</
span
>: <
span
class
=
"hljs-number"
>21</
span
> } ] }</
code
>
위 test() 메소드를 실행하면 아래와 같이 Deserializaion한 JsonString이 파싱되어 JsonObject에 알맞게 들어간다.
2. Jackson의 ObjectMapper를 이용한 Json String to JsonObject 이다.
Json내용은 위와 동일한 상태에서 진행하였다.
1
<code
class
=
"hljs swift"
><span
class
=
"hljs-keyword"
>
public
</span>
void
test() { <span
class
=
"hljs-type"
>ObjectMapper</span> objectMapper <span
class
=
"hljs-operator"
>=</span>
new
<span
class
=
"hljs-type"
>ObjectMapper</span>(); <span
class
=
"hljs-type"
>String</span> jsonString <span
class
=
"hljs-operator"
>=</span> <span
class
=
"hljs-string"
>
"{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>id<span class="
hljs-subst
">\"</span>: 1,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>password<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>1234<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>details<span class="
hljs-subst
">\"</span>: [<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" {<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 20<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" },{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test2<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 21<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" }<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" ] <span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
"}"
</span>; <span
class
=
"hljs-keyword"
>
try
</span> { <span
class
=
"hljs-type"
>TestDTO</span> t <span
class
=
"hljs-operator"
>=</span> objectMapper.readValue(jsonString, <span
class
=
"hljs-type"
>TestDTO</span>.
class
); <span
class
=
"hljs-comment"
>
gson과 마찬가지로 잘 작동된다.
3. Jackson JsonNode 를 이용한 Deserializaion String to JsonObject
어떻게 보면 가장 핵심인 부분일 수도 있다. 클래스 생성없이 할 수 있다는 큰 장점이있다.
Deserializaion Json Data는 위와 동일한 데이터를 사용한다.
1
<code
class
=
"hljs swift"
><span
class
=
"hljs-keyword"
>
public
</span>
void
test() { <span
class
=
"hljs-type"
>ObjectMapper</span> objectMapper <span
class
=
"hljs-operator"
>=</span>
new
<span
class
=
"hljs-type"
>ObjectMapper</span>(); <span
class
=
"hljs-type"
>String</span> jsonString <span
class
=
"hljs-operator"
>=</span> <span
class
=
"hljs-string"
>
"{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>id<span class="
hljs-subst
">\"</span>: 1,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>password<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>1234<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>details<span class="
hljs-subst
">\"</span>: [<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" {<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 20<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" },{<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>name<span class="
hljs-subst
">\"</span>: <span class="
hljs-subst
">\"</span>test2<span class="
hljs-subst
">\"</span>,<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" <span class="
hljs-subst
">\"</span>age<span class="
hljs-subst
">\"</span>: 21<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" }<span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
" ] <span class="
hljs-subst
">\r</span><span class="
hljs-subst
">\n</span>"
</span> <span
class
=
"hljs-operator"
>+</span> <span
class
=
"hljs-string"
>
"}"
</span>; <span
class
=
"hljs-keyword"
>
try
</span> { <span
class
=
"hljs-type"
>System</span>.out.println(<span
class
=
"hljs-string"
>
"Jackson JsonNode 테스트"
</span>); <span
class
=
"hljs-type"
>JsonNode</span> t <span
class
=
"hljs-operator"
>=</span> objectMapper.readValue(jsonString, <span
class
=
"hljs-type"
>JsonNode</span>.
class
); <span
class
=
"hljs-comment"
>
class 생성없이 파싱이 잘 되었다
이 처럼 웬만한 것들은 class를 생성하여 모든 Deserializaion을 파싱할 수 있으며,
Jackson JsonNode 를 이용하여 처리할 수 있다.