2
2
.
.
1
1
1
1
.
.
8
8
F
F
r
r
o
o
m
m
J
J
S
S
O
O
N
N
-
-
@
@
R
R
e
e
q
q
u
u
e
e
s
s
t
t
B
B
o
o
d
d
y
y
-
-
C
C
o
o
n
n
s
s
t
t
r
r
u
u
c
c
t
t
o
o
r
r
-
-
C
C
u
u
s
s
t
t
o
o
m
m
I
I
n
n
f
f
o
o
[
[
G
G
]
]
In the previous tutorial we were using Custom Deserializer to convert comma separated Float "1,67" String into Float 1.67
This tutorial shows how to achieve the same result by using Default Deserializer and then fixing just this one Property by
adding Constructor to PersonDTO to be used for Deserialization
so that it can automatically call the Method for reformatting JSON String containing Float
Syntax
@RequestMapping("/AddPerson")
public String addPerson(@RequestBody PersonDTO personDTO) { ... }
Application Schema [Results]
Spring Boot Starters
GROUP
DEPENDENCY
DESCRIPTION
Web
Spring Web
Enables: @Controller, @RequestMapping, Tomcat Server
MyController
PersonDTO
Postman
P
P
r
r
o
o
c
c
e
e
d
d
u
u
r
r
e
e
Create Project: springboot_json_deserializer (add Spring Boot Starters from the table)
Create Package: DTO (inside main package)
Create Class: PersonDTO.java (inside package DTO)
Create Package: controllers (inside main package)
Create Class: MyController.java (inside package controllers)
PersonDTO.java
package com.ivoronline.springboot_json_deserializer.DTO;
public class PersonDTO {
//PROPERTIES
public String name;
public Float height; //TO STORE FORMATTED FLOAT VALUE 1.67
//CONSTRUCTOR //DESERIALIZATION USES CONSTRUCTOR IF AVAILABLE
PersonDTO(String name, String height) { //STRING HEIGHT TO STORE COMMA SEPARATED JSON STRING "1,67"
this.name = name; //DESERIALIZED PROPERTY THAT DOESN'T NEED CUSTOM REFORMATTING
convertHeight(height); //PROPERTY THAT NEEDS CUSTOM DESERIALIZATION
}
//CONVERTERS
public void convertHeight(String height) {
height = height.replace(",", "."); //HEIGHT FROM JSON: REPLACE DOT WITH COMMA
this.height = Float.parseFloat(height); //HEIGHT FROM DTO: PARSE STRING INTO FLOAT
}
}
MyController.java
package com.ivoronline.springboot_json_deserializer.controllers;
import com.ivoronline.springboot_json_deserializer.DTO.PersonDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/AddPerson")
public String addPerson(@RequestBody PersonDTO personDTO) {
//GET DATA FROM PersonDTO
String name = personDTO.name;
Float height = personDTO.height;
//RETURN SOMETHING
return name + " is " + height + " meters high";
}
}
R
R
e
e
s
s
u
u
l
l
t
t
s
s
Start Postman
POST
http://localhost:8080/AddPerson
Headers (add Key-Value)
Content-Type: application/json
Body (option: raw)
{
"name" : "John",
"height" : "1,67"
}
Postman
HTTP Response Body
John is 1.67 meters high
Application Structure
pomx.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>