Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions jackson-modules/jackson-exceptions/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@
<version>0.0.1-SNAPSHOT</version>
</parent>

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-paranamer</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>

<build>
<finalName>jackson-exceptions</finalName>
<resources>
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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());
}
}