Bael 19 jackson inheritance (#954)
* BAEL-19 event inheritance * BAEL-19 test for json inheritance * BAEL-19 example event processor * BAEL-19 do not need json ignore * BAEL-19 simpler event, example of abstract * BAEL-19 ignoring superclass property * BAEL-586 change class event names
This commit is contained in:
parent
66449db339
commit
1d71f63693
|
@ -0,0 +1,25 @@
|
|||
package com.baeldung.jackson.inheritance;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||
|
||||
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, property = "eventType")
|
||||
abstract public class Event {
|
||||
private final String id;
|
||||
private final Long timestamp;
|
||||
|
||||
@JsonCreator
|
||||
public Event(@JsonProperty("id") String id, @JsonProperty("timestamp") Long timestamp) {
|
||||
this.id = id;
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
public Long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.baeldung.jackson.inheritance;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
|
||||
@JsonTypeName("itemIdAddedToUser")
|
||||
@JsonIgnoreProperties("id")
|
||||
public class ItemIdAddedToUser extends Event {
|
||||
private final String itemId;
|
||||
private final Long quantity;
|
||||
|
||||
@JsonCreator
|
||||
public ItemIdAddedToUser(@JsonProperty("id") String id,
|
||||
@JsonProperty("timestamp") Long timestamp,
|
||||
@JsonProperty("itemId") String itemId,
|
||||
@JsonProperty("quantity") Long quantity) {
|
||||
super(id, timestamp);
|
||||
this.itemId = itemId;
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public String getItemId() {
|
||||
return itemId;
|
||||
}
|
||||
|
||||
public Long getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.baeldung.jackson.inheritance;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
|
||||
@JsonTypeName("itemIdRemovedFromUser")
|
||||
public class ItemIdRemovedFromUser extends Event {
|
||||
private final String itemId;
|
||||
private final Long quantity;
|
||||
|
||||
@JsonCreator
|
||||
public ItemIdRemovedFromUser(@JsonProperty("id") String id,
|
||||
@JsonProperty("timestamp") Long timestamp,
|
||||
@JsonProperty("itemId") String itemId,
|
||||
@JsonProperty("quantity") Long quantity) {
|
||||
super(id, timestamp);
|
||||
this.itemId = itemId;
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public String getItemId() {
|
||||
return itemId;
|
||||
}
|
||||
|
||||
public Long getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package com.baeldung.jackson.inheritance;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ItemIdRemovedFromUserTest {
|
||||
@Test
|
||||
public void givenRemoveItemJson_whenDeserialize_shouldHaveProperClassType() throws IOException {
|
||||
//given
|
||||
Event event = new ItemIdRemovedFromUser("1", 12345567L, "item_1", 2L);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
String eventJson = objectMapper.writeValueAsString(event);
|
||||
|
||||
//when
|
||||
Event result = new ObjectMapper().readValue(eventJson, Event.class);
|
||||
|
||||
//then
|
||||
assertTrue(result instanceof ItemIdRemovedFromUser);
|
||||
assertEquals("item_1", ((ItemIdRemovedFromUser) result).getItemId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAdddItemJson_whenSerialize_shouldIgnoreIdPropertyFromSuperclass() throws IOException {
|
||||
//given
|
||||
Event event = new ItemIdAddedToUser("1", 12345567L, "item_1", 2L);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
//when
|
||||
String eventJson = objectMapper.writeValueAsString(event);
|
||||
|
||||
//then
|
||||
assertFalse(eventJson.contains("id"));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue