diff --git a/src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalSerializer.java b/src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalSerializer.java index 74ca18f..86a5be3 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalSerializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalSerializer.java @@ -215,7 +215,7 @@ public boolean isEmpty(SerializerProvider provider, Optional value) JsonSerializer ser = _valueSerializer; if (ser == null) { try { - ser = _findCachedSerializer(provider, value.getClass()); + ser = _findCachedSerializer(provider, contents.getClass()); } catch (JsonMappingException e) { // nasty but necessary throw new RuntimeJsonMappingException(e); } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jdk8/OptionalnclusionTest.java b/src/test/java/com/fasterxml/jackson/datatype/jdk8/OptionalnclusionTest.java index acb32cc..2e59de9 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jdk8/OptionalnclusionTest.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jdk8/OptionalnclusionTest.java @@ -29,6 +29,15 @@ public OptionalNonEmptyStringBean() { } } } + public static final class OptionalGenericData { + public Optional myData; + public static OptionalGenericData construct(T data) { + OptionalGenericData ret = new OptionalGenericData(); + ret.myData = Optional.of(data); + return ret; + } + } + private final ObjectMapper MAPPER = mapperWithModule(); public void testSerOptNonEmpty() throws Exception @@ -58,4 +67,40 @@ public void testExcludeEmptyStringViaOptional() throws Exception json = MAPPER.writeValueAsString(new OptionalNonEmptyStringBean("")); assertEquals("{}", json); } + + public void testSerPropInclusionAlways() throws Exception + { + JsonInclude.Value incl = + JsonInclude.Value.construct(JsonInclude.Include.NON_ABSENT, JsonInclude.Include.ALWAYS); + ObjectMapper mapper = mapperWithModule().setPropertyInclusion(incl); + assertEquals("{\"myData\":true}", + mapper.writeValueAsString(OptionalGenericData.construct(Boolean.TRUE))); + } + + public void testSerPropInclusionNonNull() throws Exception + { + JsonInclude.Value incl = + JsonInclude.Value.construct(JsonInclude.Include.NON_ABSENT, JsonInclude.Include.NON_NULL); + ObjectMapper mapper = mapperWithModule().setPropertyInclusion(incl); + assertEquals("{\"myData\":true}", + mapper.writeValueAsString(OptionalGenericData.construct(Boolean.TRUE))); + } + + public void testSerPropInclusionNonAbsent() throws Exception + { + JsonInclude.Value incl = + JsonInclude.Value.construct(JsonInclude.Include.NON_ABSENT, JsonInclude.Include.NON_ABSENT); + ObjectMapper mapper = mapperWithModule().setPropertyInclusion(incl); + assertEquals("{\"myData\":true}", + mapper.writeValueAsString(OptionalGenericData.construct(Boolean.TRUE))); + } + + public void testSerPropInclusionNonEmpty() throws Exception + { + JsonInclude.Value incl = + JsonInclude.Value.construct(JsonInclude.Include.NON_ABSENT, JsonInclude.Include.NON_EMPTY); + ObjectMapper mapper = mapperWithModule().setPropertyInclusion(incl); + assertEquals("{\"myData\":true}", + mapper.writeValueAsString(OptionalGenericData.construct(Boolean.TRUE))); + } }