Create Project: springboot_json_deserializer (add Spring Boot Starters from the table)
Create Package: DTO (inside main package)
– Create Class: PersonDTODeserializer.java (inside package DTO)
– Create Class: PersonDTO.java (inside package DTO)
Create Package: controllers (inside main package)
– Create Class: MyController.java (inside package controllers)
PersonDTODeserializer.java
package com.ivoronline.springboot_json_deserializer.DTO;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
public class PersonDTODeserializer extends JsonDeserializer<PersonDTO> {
@Override
public PersonDTO deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
//PREPARE JSON STUFF
ObjectCodec objectCodec = jsonParser.getCodec();
JsonNode node = objectCodec.readTree(jsonParser);
//DESERIALIZE PROBLEMATIC JSON PROPERTY: HEIGHT
String heightString = node.get("height").asText();
heightString = heightString.replace(',', '.'); //Convert "1,67" into "1.67"
Float height = Float.parseFloat(heightString); //Create Float from String
//CREATE PERSONDTO
PersonDTO personDTO = new PersonDTO();
personDTO.name = node.get("name").asText(); //NORMAL PROPERTY
personDTO.height = height; //PROBLEMATIC PROPERTY
//RETURN PERSONDTO
return personDTO;
}
}
PersonDTO.java
package com.ivoronline.springboot_json_deserializer.DTO;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = PersonDTODeserializer.class)
public class PersonDTO {
public String name;
public Float height;
}