BAEL-6293: Add builder pattern for ObjectMapper creation (#14112)
Co-authored-by: Tapan Avasthi <tavasthi@Tapans-MacBook-Air.local>
This commit is contained in:
parent
498cc8aa98
commit
668b8f0b77
|
@ -0,0 +1,45 @@
|
|||
package com.baeldung.jackson.objectmapper;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.ZoneId;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
|
||||
public class ObjectMapperBuilder {
|
||||
private boolean enableIndentation;
|
||||
private boolean preserveOrder;
|
||||
private DateFormat dateFormat;
|
||||
|
||||
public ObjectMapperBuilder enableIndentation() {
|
||||
this.enableIndentation = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ObjectMapperBuilder dateFormat() {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm a z");
|
||||
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Kolkata")));
|
||||
this.dateFormat = simpleDateFormat;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ObjectMapperBuilder preserveOrder(boolean order) {
|
||||
this.preserveOrder = order;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ObjectMapper build() {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, this.enableIndentation);
|
||||
objectMapper.setDateFormat(this.dateFormat);
|
||||
if (this.preserveOrder) {
|
||||
objectMapper.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
|
||||
}
|
||||
|
||||
return objectMapper;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.baeldung.jackson.objectmapper;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
||||
import com.baeldung.jackson.objectmapper.dto.Car;
|
||||
import com.baeldung.jackson.objectmapper.dto.Request;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class ObjectMapperBuilderUnitTest {
|
||||
|
||||
ObjectMapper mapper = new ObjectMapperBuilder()
|
||||
.enableIndentation()
|
||||
.dateFormat()
|
||||
.preserveOrder(true)
|
||||
.build();
|
||||
|
||||
Car givenCar = new Car("White", "Sedan");
|
||||
String givenCarJsonStr = "{ \"color\" : \"White\", \"type\" : \"Sedan\" }";
|
||||
|
||||
@Test
|
||||
public void whenReadCarJsonStr_thenReturnCarObjectCorrectly() throws JsonProcessingException {
|
||||
Car actual = mapper.readValue(givenCarJsonStr, Car.class);
|
||||
Assertions.assertEquals("White", actual.getColor());
|
||||
Assertions.assertEquals("Sedan", actual.getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenWriteRequestObject_thenReturnRequestJsonStrCorrectly() throws JsonProcessingException {
|
||||
Request request = new Request();
|
||||
request.setCar(givenCar);
|
||||
Date date = new Date(1684909857000L);
|
||||
request.setDatePurchased(date);
|
||||
|
||||
String actual = mapper.writeValueAsString(request);
|
||||
String expected = "{\n" + " \"car\" : {\n" + " \"color\" : \"White\",\n" +
|
||||
" \"type\" : \"Sedan\"\n" + " },\n" + " \"datePurchased\" : \"2023-05-24 12:00 PM IST\"\n" +
|
||||
"}";
|
||||
Assertions.assertEquals(expected, actual);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue