diff --git a/jackson-modules/jackson-exceptions/pom.xml b/jackson-modules/jackson-exceptions/pom.xml index e19ef4f8835b..920514b08ddb 100644 --- a/jackson-modules/jackson-exceptions/pom.xml +++ b/jackson-modules/jackson-exceptions/pom.xml @@ -12,6 +12,14 @@ 0.0.1-SNAPSHOT + + + com.fasterxml.jackson.module + jackson-module-paranamer + ${jackson.version} + + + jackson-exceptions diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/Notification.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/Notification.java new file mode 100644 index 000000000000..0eb4f70b9e4b --- /dev/null +++ b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/Notification.java @@ -0,0 +1,20 @@ +package com.baeldung.invaliddefinitionexception; + +public class Notification { + + private final String message; + private final int priority; + + public Notification(String message, int priority) { + this.message = message; + this.priority = priority; + } + + public String getMessage() { + return message; + } + + public int getPriority() { + return priority; + } +} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithCreator.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithCreator.java new file mode 100644 index 000000000000..55a8cbd4787e --- /dev/null +++ b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithCreator.java @@ -0,0 +1,24 @@ +package com.baeldung.invaliddefinitionexception; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class NotificationWithCreator { + + private final String message; + private final int priority; + + @JsonCreator + public NotificationWithCreator(@JsonProperty("message") String message, @JsonProperty("priority") int priority) { + this.message = message; + this.priority = priority; + } + + public String getMessage() { + return message; + } + + public int getPriority() { + return priority; + } +} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithDefaultConstructor.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithDefaultConstructor.java new file mode 100644 index 000000000000..8ef64554b0fa --- /dev/null +++ b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/invaliddefinitionexception/NotificationWithDefaultConstructor.java @@ -0,0 +1,26 @@ +package com.baeldung.invaliddefinitionexception; + +public class NotificationWithDefaultConstructor { + + private String message; + private int priority; + + public NotificationWithDefaultConstructor() { + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + } +} \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/invaliddefinitionexception/NotificationDeserializationUnitTest.java b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/invaliddefinitionexception/NotificationDeserializationUnitTest.java new file mode 100644 index 000000000000..8468869c8a2f --- /dev/null +++ b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/invaliddefinitionexception/NotificationDeserializationUnitTest.java @@ -0,0 +1,56 @@ +package com.baeldung.invaliddefinitionexception; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.exc.InvalidDefinitionException; +import com.fasterxml.jackson.module.paranamer.ParanamerModule; + +class NotificationDeserializationUnitTest { + + private static final String JSON = "{\"message\":\"Server maintenance\",\"priority\":2}"; + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Test + void givenNotificationWithoutCreator_whenDeserializing_thenThrowException() { + InvalidDefinitionException exception = assertThrows(InvalidDefinitionException.class, () -> objectMapper.readValue(JSON, Notification.class)); + + assertTrue(exception.getMessage() + .contains("no Creators, like default constructor, exist")); + } + + @Test + void givenNotificationWithDefaultConstructor_whenDeserializing_thenCorrect() throws Exception { + + NotificationWithDefaultConstructor notification = objectMapper.readValue(JSON, NotificationWithDefaultConstructor.class); + + assertEquals("Server maintenance", notification.getMessage()); + assertEquals(2, notification.getPriority()); + } + + @Test + void givenNotificationWithCreator_whenDeserializing_thenCorrect() throws Exception { + + NotificationWithCreator notification = objectMapper.readValue(JSON, NotificationWithCreator.class); + + assertEquals("Server maintenance", notification.getMessage()); + assertEquals(2, notification.getPriority()); + } + + @Test + void givenParanamerModule_whenDeserializingNotification_thenCorrect() throws Exception { + + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new ParanamerModule()); + + Notification notification = mapper.readValue(JSON, Notification.class); + + assertEquals("Server maintenance", notification.getMessage()); + assertEquals(2, notification.getPriority()); + } +} \ No newline at end of file