Skip to content
Snippets Groups Projects

Add a specialized Optional serializer actually serializing values

3 files
+ 103
0
Compare changes
  • Side-by-side
  • Inline

Files

package nl.tudelft.ewi.auta.core.response;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.Optional;
/**
* A serializer for {@link Optional}s.
*
* By default Jackson only touches what it can recognize as getters, which in the case of Optional
* appear to be {@link Optional#isEmpty()} and {@link Optional#isPresent()}. This serializer
* instead serializes the value if present and outputs {@code null} otherwise.
*/
@Service
public class OptionalSerializer extends StdSerializer<Optional> {
/**
* Creates a new {@code Optional} serializer.
*/
public OptionalSerializer() {
super(Optional.class);
}
/**
* {@inheritDoc}
*/
@Override
public void serialize(
final Optional optional, final JsonGenerator gen, final SerializerProvider provider
) throws IOException {
if (optional.isPresent()) {
final var value = optional.get();
provider.findValueSerializer(value.getClass()).serialize(value, gen, provider);
} else {
gen.writeNull();
}
}
}
Loading