Skip to content
This repository was archived by the owner on Jan 20, 2025. It is now read-only.

Commit 5d9c8ce

Browse files
committed
Added 'isEmpty()' implementation for GuavaOptionalSerializer; minor test cleanup
1 parent 3d0f6a2 commit 5d9c8ce

File tree

4 files changed

+44
-32
lines changed

4 files changed

+44
-32
lines changed

src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaBeanSerializerModifier.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ public class GuavaBeanSerializerModifier extends BeanSerializerModifier {
1212

1313
@Override
1414
public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
15-
BeanDescription beanDesc,
16-
List<BeanPropertyWriter> beanProperties) {
17-
15+
BeanDescription beanDesc,
16+
List<BeanPropertyWriter> beanProperties)
17+
{
1818
for (int i = 0; i < beanProperties.size(); ++i) {
1919
final BeanPropertyWriter writer = beanProperties.get(i);
20-
if (Optional.class.isAssignableFrom(writer.getPropertyType()))
20+
if (Optional.class.isAssignableFrom(writer.getPropertyType())) {
2121
beanProperties.set(i, new GuavaOptionalBeanPropertyWriter(writer));
22+
}
2223
}
23-
2424
return beanProperties;
2525
}
26-
2726
}

src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaOptionalBeanPropertyWriter.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ protected GuavaOptionalBeanPropertyWriter(BeanPropertyWriter base) {
1212
}
1313

1414
@Override
15-
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov) throws Exception {
16-
if ((get(bean) == null || Optional.absent().equals(get(bean))) && _nullSerializer == null) {
17-
return;
15+
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov) throws Exception
16+
{
17+
if (_nullSerializer == null) {
18+
Object value = get(bean);
19+
if (value == null || Optional.absent().equals(value)) {
20+
return;
21+
}
1822
}
1923
super.serializeAsField(bean, jgen, prov);
2024
}

src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaOptionalSerializer.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,18 @@
1111
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
1212
import com.google.common.base.Optional;
1313

14-
public final class GuavaOptionalSerializer extends StdSerializer<Optional<?>> {
14+
public final class GuavaOptionalSerializer extends StdSerializer<Optional<?>>
15+
{
1516
public GuavaOptionalSerializer(JavaType type) {
1617
super(type);
1718
}
1819

20+
// implemented since 2.3
21+
@Override
22+
public boolean isEmpty(Optional<?> value) {
23+
return (value == null) || !value.isPresent();
24+
}
25+
1926
@Override
2027
public void serialize(Optional<?> value, JsonGenerator jgen, SerializerProvider provider)
2128
throws IOException, JsonGenerationException {
Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,87 @@
11
package com.fasterxml.jackson.datatype.guava;
22

3-
43
import com.fasterxml.jackson.annotation.JsonAutoDetect;
54
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
65
import com.fasterxml.jackson.annotation.JsonInclude;
76
import com.fasterxml.jackson.core.type.TypeReference;
87
import com.fasterxml.jackson.databind.ObjectMapper;
98
import com.google.common.base.Optional;
109

11-
public class TestOptional extends BaseTest {
10+
public class TestOptional extends BaseTest
11+
{
12+
private final ObjectMapper MAPPER = mapperWithModule();
13+
14+
@JsonAutoDetect(fieldVisibility=Visibility.ANY)
15+
public static final class OptionalData{
16+
private Optional<String> myString;
17+
}
18+
19+
@JsonAutoDetect(fieldVisibility=Visibility.ANY)
20+
public static final class OptionalGenericData<T>{
21+
private Optional<T> myData;
22+
}
23+
1224
public void testDeserAbsent() throws Exception {
13-
Optional<?> value = mapperWithModule().readValue("null", new TypeReference<Optional<String>>() {});
25+
Optional<?> value = MAPPER.readValue("null", new TypeReference<Optional<String>>() {});
1426
assertFalse(value.isPresent());
1527
}
1628

1729
public void testDeserSimpleString() throws Exception{
18-
Optional<?> value = mapperWithModule().readValue("\"simpleString\"", new TypeReference<Optional<String>>() {});
30+
Optional<?> value = MAPPER.readValue("\"simpleString\"", new TypeReference<Optional<String>>() {});
1931
assertTrue(value.isPresent());
2032
assertEquals("simpleString", value.get());
2133
}
2234

2335
public void testDeserInsideObject() throws Exception {
24-
OptionalData data = mapperWithModule().readValue("{\"myString\":\"simpleString\"}", OptionalData.class);
36+
OptionalData data = MAPPER.readValue("{\"myString\":\"simpleString\"}", OptionalData.class);
2537
assertTrue(data.myString.isPresent());
2638
assertEquals("simpleString", data.myString.get());
2739
}
2840

2941
public void testDeserComplexObject() throws Exception {
3042
TypeReference<Optional<OptionalData>> type = new TypeReference<Optional<OptionalData>>() {};
31-
Optional<OptionalData> data = mapperWithModule().readValue("{\"myString\":\"simpleString\"}", type);
43+
Optional<OptionalData> data = MAPPER.readValue("{\"myString\":\"simpleString\"}", type);
3244
assertTrue(data.isPresent());
3345
assertTrue(data.get().myString.isPresent());
3446
assertEquals("simpleString", data.get().myString.get());
3547
}
3648

3749
public void testDeserGeneric() throws Exception {
3850
TypeReference<Optional<OptionalGenericData<String>>> type = new TypeReference<Optional<OptionalGenericData<String>>>() {};
39-
Optional<OptionalGenericData<String>> data = mapperWithModule().readValue("{\"myData\":\"simpleString\"}", type);
51+
Optional<OptionalGenericData<String>> data = MAPPER.readValue("{\"myData\":\"simpleString\"}", type);
4052
assertTrue(data.isPresent());
4153
assertTrue(data.get().myData.isPresent());
4254
assertEquals("simpleString", data.get().myData.get());
4355
}
4456

4557
public void testSerAbsent() throws Exception {
46-
String value = mapperWithModule().writeValueAsString(Optional.absent());
58+
String value = MAPPER.writeValueAsString(Optional.absent());
4759
assertEquals("null", value);
4860
}
4961

5062
public void testSerSimpleString() throws Exception {
51-
String value = mapperWithModule().writeValueAsString(Optional.of("simpleString"));
63+
String value = MAPPER.writeValueAsString(Optional.of("simpleString"));
5264
assertEquals("\"simpleString\"", value);
5365
}
5466

5567
public void testSerInsideObject() throws Exception {
5668
OptionalData data = new OptionalData();
5769
data.myString = Optional.of("simpleString");
58-
String value = mapperWithModule().writeValueAsString(data);
70+
String value = MAPPER.writeValueAsString(data);
5971
assertEquals("{\"myString\":\"simpleString\"}", value);
6072
}
6173

6274
public void testSerComplexObject() throws Exception {
6375
OptionalData data = new OptionalData();
6476
data.myString = Optional.of("simpleString");
65-
String value = mapperWithModule().writeValueAsString(Optional.of(data));
77+
String value = MAPPER.writeValueAsString(Optional.of(data));
6678
assertEquals("{\"myString\":\"simpleString\"}", value);
6779
}
6880

6981
public void testSerGeneric() throws Exception {
7082
OptionalGenericData<String> data = new OptionalGenericData<String>();
7183
data.myData = Optional.of("simpleString");
72-
String value = mapperWithModule().writeValueAsString(Optional.of(data));
84+
String value = MAPPER.writeValueAsString(Optional.of(data));
7385
assertEquals("{\"myData\":\"simpleString\"}", value);
7486
}
7587

@@ -99,15 +111,5 @@ public void testWithTypingEnabled() throws Exception {
99111

100112
final OptionalData deserializedMyData = objectMapper.readValue(json, OptionalData.class);
101113
assertEquals(myData.myString, deserializedMyData.myString);
102-
}
103-
104-
@JsonAutoDetect(fieldVisibility=Visibility.ANY)
105-
public static final class OptionalData{
106-
private Optional<String> myString;
107-
}
108-
109-
@JsonAutoDetect(fieldVisibility=Visibility.ANY)
110-
public static final class OptionalGenericData<T>{
111-
private Optional<T> myData;
112114
}
113115
}

0 commit comments

Comments
 (0)