Skip to content
This repository was archived by the owner on Nov 7, 2019. It is now read-only.

Commit c969af5

Browse files
committed
Cleanup: use Std(De)Serializer as base, support exclusion of empty values
1 parent b9c56b4 commit c969af5

8 files changed

+76
-35
lines changed

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalDeserializer.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@
44
import java.util.Optional;
55

66
import com.fasterxml.jackson.core.JsonParser;
7-
import com.fasterxml.jackson.core.JsonProcessingException;
87
import com.fasterxml.jackson.core.JsonToken;
9-
import com.fasterxml.jackson.databind.BeanProperty;
10-
import com.fasterxml.jackson.databind.DeserializationContext;
11-
import com.fasterxml.jackson.databind.JavaType;
12-
import com.fasterxml.jackson.databind.JsonDeserializer;
13-
import com.fasterxml.jackson.databind.JsonMappingException;
8+
9+
import com.fasterxml.jackson.databind.*;
1410
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
1511
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
1612
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
@@ -77,9 +73,7 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
7773
if (deser == null) {
7874
deser = ctxt.findContextualValueDeserializer(_referenceType, property);
7975
} else { // otherwise directly assigned, probably not contextual yet:
80-
// !!! TODO: in 2.6, use this instead:
81-
// deser = ctxt.handleSecondaryContextualization(deser, property, _referenceType);
82-
deser = ctxt.handleSecondaryContextualization(deser, property);
76+
deser = ctxt.handleSecondaryContextualization(deser, property, _referenceType);
8377
}
8478
if (typeDeser != null) {
8579
typeDeser = typeDeser.forProperty(property);
@@ -91,8 +85,7 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
9185
}
9286

9387
@Override
94-
public Optional<?> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
95-
JsonProcessingException
88+
public Optional<?> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
9689
{
9790
Object refd;
9891

@@ -108,7 +101,7 @@ public Optional<?> deserialize(JsonParser jp, DeserializationContext ctxt) throw
108101
*/
109102
@Override
110103
public Optional<?> deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer)
111-
throws IOException, JsonProcessingException
104+
throws IOException
112105
{
113106
final JsonToken t = jp.getCurrentToken();
114107
if (t == JsonToken.VALUE_NULL) {

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalDoubleDeserializer.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,25 @@
55

66
import com.fasterxml.jackson.core.JsonParser;
77
import com.fasterxml.jackson.databind.DeserializationContext;
8-
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
99

10-
final class OptionalDoubleDeserializer extends JsonDeserializer<OptionalDouble>
10+
final class OptionalDoubleDeserializer extends StdDeserializer<OptionalDouble>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalDoubleDeserializer INSTANCE = new OptionalDoubleDeserializer();
1315

16+
public OptionalDoubleDeserializer() {
17+
super(OptionalDouble.class);
18+
}
19+
1420
@Override
1521
public OptionalDouble getNullValue() {
1622
return OptionalDouble.empty();
1723
}
1824

1925
@Override
20-
public OptionalDouble deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
21-
{
22-
return OptionalDouble.of(jp.getDoubleValue());
26+
public OptionalDouble deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
27+
return OptionalDouble.of(jp.getValueAsDouble());
2328
}
2429
}

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalDoubleSerializer.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@
44
import java.util.OptionalDouble;
55

66
import com.fasterxml.jackson.core.JsonGenerator;
7-
import com.fasterxml.jackson.databind.JsonSerializer;
87
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
99

10-
final class OptionalDoubleSerializer extends JsonSerializer<OptionalDouble>
10+
public class OptionalDoubleSerializer extends StdSerializer<OptionalDouble>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalDoubleSerializer INSTANCE = new OptionalDoubleSerializer();
1315

16+
public OptionalDoubleSerializer() {
17+
super(OptionalDouble.class);
18+
}
19+
1420
@Override
1521
public void serialize(OptionalDouble value, JsonGenerator jgen, SerializerProvider provider)
16-
throws IOException
22+
throws IOException
1723
{
1824
if (value.isPresent()) {
1925
jgen.writeNumber(value.getAsDouble());

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalIntDeserializer.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55

66
import com.fasterxml.jackson.core.JsonParser;
77
import com.fasterxml.jackson.databind.DeserializationContext;
8-
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
99

10-
final class OptionalIntDeserializer extends JsonDeserializer<OptionalInt>
10+
public class OptionalIntDeserializer extends StdDeserializer<OptionalInt>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalIntDeserializer INSTANCE = new OptionalIntDeserializer();
1315

16+
public OptionalIntDeserializer() {
17+
super(OptionalInt.class);
18+
}
19+
1420
@Override
1521
public OptionalInt getNullValue() {
1622
return OptionalInt.empty();
@@ -19,6 +25,6 @@ public OptionalInt getNullValue() {
1925
@Override
2026
public OptionalInt deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
2127
{
22-
return OptionalInt.of(jp.getIntValue());
28+
return OptionalInt.of(jp.getValueAsInt());
2329
}
2430
}

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalIntSerializer.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,28 @@
44
import java.util.OptionalInt;
55

66
import com.fasterxml.jackson.core.JsonGenerator;
7-
import com.fasterxml.jackson.databind.JsonSerializer;
87
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
99

10-
final class OptionalIntSerializer extends JsonSerializer<OptionalInt>
10+
final class OptionalIntSerializer extends StdSerializer<OptionalInt>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalIntSerializer INSTANCE = new OptionalIntSerializer();
1315

16+
public OptionalIntSerializer() {
17+
super(OptionalInt.class);
18+
}
19+
20+
// @since 2.6
21+
@Override
22+
public boolean isEmpty(SerializerProvider provider, OptionalInt value) {
23+
return (value == null) || !value.isPresent();
24+
}
25+
1426
@Override
1527
public void serialize(OptionalInt value, JsonGenerator jgen, SerializerProvider provider)
16-
throws IOException
28+
throws IOException
1729
{
1830
if (value.isPresent()) {
1931
jgen.writeNumber(value.getAsInt());

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalLongDeserializer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55

66
import com.fasterxml.jackson.core.JsonParser;
77
import com.fasterxml.jackson.databind.DeserializationContext;
8-
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
99

10-
final class OptionalLongDeserializer extends JsonDeserializer<OptionalLong>
10+
public class OptionalLongDeserializer extends StdDeserializer<OptionalLong>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalLongDeserializer INSTANCE = new OptionalLongDeserializer();
1315

16+
public OptionalLongDeserializer() {
17+
super(OptionalLong.class);
18+
}
19+
1420
@Override
1521
public OptionalLong getNullValue() {
1622
return OptionalLong.empty();

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalLongSerializer.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,32 @@
44
import java.util.OptionalLong;
55

66
import com.fasterxml.jackson.core.JsonGenerator;
7-
import com.fasterxml.jackson.databind.JsonSerializer;
87
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
99

10-
final class OptionalLongSerializer extends JsonSerializer<OptionalLong>
10+
final class OptionalLongSerializer extends StdSerializer<OptionalLong>
1111
{
12+
private static final long serialVersionUID = 1L;
13+
1214
static final OptionalLongSerializer INSTANCE = new OptionalLongSerializer();
1315

16+
public OptionalLongSerializer() {
17+
super(OptionalLong.class);
18+
}
19+
20+
// @since 2.6
21+
@Override
22+
public boolean isEmpty(SerializerProvider provider, OptionalLong value) {
23+
return (value == null) || !value.isPresent();
24+
}
25+
1426
@Override
1527
public void serialize(OptionalLong value, JsonGenerator jgen, SerializerProvider provider)
1628
throws IOException
1729
{
1830
if (value.isPresent()) {
1931
jgen.writeNumber(value.getAsLong());
20-
} else {
32+
} else { // should we get here?
2133
jgen.writeNull();
2234
}
2335
}

src/main/java/com/fasterxml/jackson/datatype/jdk8/OptionalSerializer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
1717
import com.fasterxml.jackson.databind.type.TypeFactory;
1818

19-
final class OptionalSerializer
19+
public class OptionalSerializer
2020
extends StdSerializer<Optional<?>>
2121
implements ContextualSerializer
2222
{
23+
private static final long serialVersionUID = 1L;
24+
2325
/**
2426
* Declared type for the property being serialized with
2527
* this serializer instance.
@@ -52,13 +54,12 @@ protected OptionalSerializer withResolved(BeanProperty property,
5254
// implemented since 2.3
5355
@Override
5456
public boolean isEmpty(Optional<?> value) {
55-
return (value == null) || !value.isPresent();
57+
return isEmpty(null, value);
5658
}
5759

5860
@Override
5961
public boolean isEmpty(SerializerProvider provider, Optional<?> value) {
60-
// TODO: change to chain the other way in 2.6+
61-
return isEmpty(value);
62+
return (value == null) || !value.isPresent();
6263
}
6364

6465
@Override

0 commit comments

Comments
 (0)