85 lines
3.8 KiB
Java
85 lines
3.8 KiB
Java
package com.baeldung.jackson.objectmapper;
|
|
|
|
import com.baeldung.jackson.objectmapper.dto.Car;
|
|
import com.baeldung.jackson.objectmapper.dto.Request;
|
|
import com.fasterxml.jackson.core.Version;
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
import org.junit.Test;
|
|
|
|
import java.text.DateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
|
|
import static org.hamcrest.Matchers.containsString;
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertThat;
|
|
|
|
public class SerializationDeserializationFeatureUnitTest {
|
|
final String EXAMPLE_JSON = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
|
|
final String JSON_CAR = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" : \"1970\" }";
|
|
final String JSON_ARRAY = "[{ \"color\" : \"Black\", \"type\" : \"BMW\" }, { \"color\" : \"Red\", \"type\" : \"BMW\" }]";
|
|
|
|
@Test
|
|
public void whenFailOnUnkownPropertiesFalse_thanJsonReadCorrectly() throws Exception {
|
|
|
|
final ObjectMapper objectMapper = new ObjectMapper();
|
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
final Car car = objectMapper.readValue(JSON_CAR, Car.class);
|
|
final JsonNode jsonNodeRoot = objectMapper.readTree(JSON_CAR);
|
|
final JsonNode jsonNodeYear = jsonNodeRoot.get("year");
|
|
final String year = jsonNodeYear.asText();
|
|
|
|
assertNotNull(car);
|
|
assertThat(car.getColor(), equalTo("Black"));
|
|
assertThat(year, containsString("1970"));
|
|
}
|
|
|
|
@Test
|
|
public void whenCustomSerializerDeserializer_thanReadWriteCorrect() throws Exception {
|
|
final ObjectMapper mapper = new ObjectMapper();
|
|
final SimpleModule serializerModule = new SimpleModule("CustomSerializer", new Version(1, 0, 0, null, null, null));
|
|
serializerModule.addSerializer(Car.class, new CustomCarSerializer());
|
|
mapper.registerModule(serializerModule);
|
|
final Car car = new Car("yellow", "renault");
|
|
final String carJson = mapper.writeValueAsString(car);
|
|
assertThat(carJson, containsString("renault"));
|
|
assertThat(carJson, containsString("model"));
|
|
|
|
final SimpleModule deserializerModule = new SimpleModule("CustomCarDeserializer", new Version(1, 0, 0, null, null, null));
|
|
deserializerModule.addDeserializer(Car.class, new CustomCarDeserializer());
|
|
mapper.registerModule(deserializerModule);
|
|
final Car carResult = mapper.readValue(EXAMPLE_JSON, Car.class);
|
|
assertNotNull(carResult);
|
|
assertThat(carResult.getColor(), equalTo("Black"));
|
|
}
|
|
|
|
@Test
|
|
public void whenDateFormatSet_thanSerializedAsExpected() throws Exception {
|
|
final ObjectMapper objectMapper = new ObjectMapper();
|
|
final Car car = new Car("yellow", "renault");
|
|
final Request request = new Request();
|
|
request.setCar(car);
|
|
request.setDatePurchased(new Date());
|
|
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm a z");
|
|
objectMapper.setDateFormat(df);
|
|
final String carAsString = objectMapper.writeValueAsString(request);
|
|
assertNotNull(carAsString);
|
|
assertThat(carAsString, containsString("datePurchased"));
|
|
}
|
|
|
|
@Test
|
|
public void whenUseJavaArrayForJsonArrayTrue_thanJsonReadAsArray() throws Exception {
|
|
final ObjectMapper objectMapper = new ObjectMapper();
|
|
objectMapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true);
|
|
final Car[] cars = objectMapper.readValue(JSON_ARRAY, Car[].class);
|
|
for (final Car car : cars) {
|
|
assertNotNull(car);
|
|
assertThat(car.getType(), equalTo("BMW"));
|
|
}
|
|
}
|
|
}
|