82 lines
3.7 KiB
Java
82 lines
3.7 KiB
Java
package com.baeldung.deserialization;
|
|
|
|
import com.fasterxml.jackson.core.JsonParseException;
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
import org.junit.Test;
|
|
|
|
import java.io.IOException;
|
|
import java.time.ZoneId;
|
|
import java.time.ZonedDateTime;
|
|
|
|
import static org.hamcrest.CoreMatchers.is;
|
|
import static org.hamcrest.CoreMatchers.not;
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
import static org.hamcrest.Matchers.notNullValue;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertThat;
|
|
|
|
public class CustomDeserializationUnitTest {
|
|
|
|
@Test
|
|
public final void whenDeserializingTheStandardRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException {
|
|
final String json = "{\"id\":1,\"itemName\":\"theItem\",\"owner\":{\"id\":2,\"name\":\"theUser\"}}";
|
|
|
|
final Item readValue = new ObjectMapper().readValue(json, Item.class);
|
|
assertThat(readValue, notNullValue());
|
|
}
|
|
|
|
@Test
|
|
public final void whenDeserializingANonStandardRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException {
|
|
final String json = "{\"id\":1,\"itemName\":\"theItem\",\"createdBy\":2}";
|
|
final ObjectMapper mapper = new ObjectMapper();
|
|
|
|
final SimpleModule module = new SimpleModule();
|
|
module.addDeserializer(Item.class, new ItemDeserializer());
|
|
mapper.registerModule(module);
|
|
|
|
final Item readValue = mapper.readValue(json, Item.class);
|
|
assertThat(readValue, notNullValue());
|
|
}
|
|
|
|
@Test
|
|
public final void givenDeserializerIsOnClass_whenDeserializingCustomRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException {
|
|
final String json = "{\"id\":1,\"itemName\":\"theItem\",\"owner\":2}";
|
|
|
|
final ItemWithDeserializer readValue = new ObjectMapper().readValue(json, ItemWithDeserializer.class);
|
|
assertThat(readValue, notNullValue());
|
|
}
|
|
|
|
@Test
|
|
public void whenDeserialisingZonedDateTimeWithDefaults_thenTimeZoneIsNotPreserved() throws IOException {
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
objectMapper.findAndRegisterModules();
|
|
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
// construct a new instance of ZonedDateTime
|
|
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
|
|
String converted = objectMapper.writeValueAsString(now);
|
|
// restore an instance of ZonedDateTime from String
|
|
ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class);
|
|
assertThat(now, is(not(restored)));
|
|
}
|
|
|
|
@Test
|
|
public void whenDeserialisingZonedDateTimeWithFeaturesDisabled_thenTimeZoneIsPreserved() throws IOException {
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
objectMapper.findAndRegisterModules();
|
|
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
objectMapper.enable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID);
|
|
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
|
|
// construct a new instance of ZonedDateTime
|
|
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
|
|
String converted = objectMapper.writeValueAsString(now);
|
|
// restore an instance of ZonedDateTime from String
|
|
ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class);
|
|
assertThat(restored, is(now));
|
|
}
|
|
|
|
}
|