Skip to content

Commit 1febec1

Browse files
committed
Fix deserialization if subtype discriminator is missing
1 parent fe6974d commit 1febec1

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CartDiscountTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import static org.assertj.core.api.Assertions.assertThat;
55

66
import com.commercetools.api.models.cart_discount.*;
7+
import com.commercetools.api.models.common.ReferenceTypeId;
78

9+
import io.vrap.rmf.base.client.utils.json.JsonUtils;
10+
11+
import org.assertj.core.api.Assertions;
812
import org.junit.jupiter.api.Test;
913

1014
public class CartDiscountTest {
@@ -94,4 +98,17 @@ public void giftLineItemValueToDraft() {
9498
});
9599

96100
}
101+
102+
@Test
103+
public void deserializeGiftLineItemWithoutTypeId() {
104+
String json = "{\"value\": { \"type\": \"giftLineItem\", \"product\": { \"id\": \"foo\" } } }";
105+
CartDiscount cartDiscount = JsonUtils.fromJsonString(json, CartDiscount.class);
106+
Assertions.assertThat(cartDiscount.getValue())
107+
.isInstanceOfSatisfying(CartDiscountValueGiftLineItem.class, cartDiscountValueGiftLineItem -> {
108+
assertThat(cartDiscountValueGiftLineItem.getProduct().getId()).isEqualTo("foo");
109+
assertThat(cartDiscountValueGiftLineItem.getProduct().getTypeId())
110+
.isEqualTo(ReferenceTypeId.PRODUCT);
111+
});
112+
Assertions.assertThat(cartDiscount.getValue()).isInstanceOf(CartDiscountValueGiftLineItem.class);
113+
}
97114
}

rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/utils/json/JsonUtils.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.fasterxml.jackson.core.JsonProcessingException;
1212
import com.fasterxml.jackson.core.type.TypeReference;
1313
import com.fasterxml.jackson.databind.*;
14+
import com.fasterxml.jackson.databind.json.JsonMapper;
1415
import com.fasterxml.jackson.databind.module.SimpleModule;
1516
import com.fasterxml.jackson.databind.node.ArrayNode;
1617
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -52,17 +53,19 @@ public static ObjectMapper createObjectMapper(final ModuleOptions options) {
5253
final List<SimpleModule> moduleList = new ArrayList<>();
5354
suppliers.iterator().forEachRemaining(moduleSupplier -> moduleList.add(moduleSupplier.getModule(options)));
5455

55-
final ObjectMapper objectMapper = new ObjectMapper();
56-
objectMapper.registerModule(new JavaTimeModule()) //provides serialization and deserialization for LocalDate and LocalTime (JSR310 Jackson module)
57-
.registerModule(new ZonedDateTimeSerializationModule()) //custom serializer for LocalDate, LocalTime and ZonedDateTime
58-
.registerModule(new ZonedDateTimeDeserializationModule()) //custom deserializer for ZonedDateTime
59-
.registerModule(new LocalDateDeserializationModule()) //custom deserializer for LocalDate
60-
.registerModules(loader)
61-
.registerModules(moduleList)
62-
.setSerializationInclusion(JsonInclude.Include.NON_NULL) //ignore null fields
56+
return JsonMapper.builder()
57+
.configure(MapperFeature.REQUIRE_TYPE_ID_FOR_SUBTYPES, false)
6358
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
64-
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
65-
return objectMapper;
59+
.configure(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY, false)
60+
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
61+
.serializationInclusion(JsonInclude.Include.NON_NULL)
62+
.addModule(new JavaTimeModule())
63+
.addModule(new ZonedDateTimeSerializationModule()) //custom serializer for LocalDate, LocalTime and ZonedDateTime
64+
.addModule(new ZonedDateTimeDeserializationModule()) //custom deserializer for ZonedDateTime
65+
.addModule(new LocalDateDeserializationModule()) //custom deserializer for LocalDate
66+
.addModules(loader)
67+
.addModules(moduleList)
68+
.build();
6669
}
6770

6871
/**

0 commit comments

Comments
 (0)