Skip to content

Instantly share code, notes, and snippets.

@PhilLehmann
Created October 13, 2017 12:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PhilLehmann/bed9dbbf3cfa0bfe1f4dd15b870de597 to your computer and use it in GitHub Desktop.
Save PhilLehmann/bed9dbbf3cfa0bfe1f4dd15b870de597 to your computer and use it in GitHub Desktop.
VertXJsonCodec
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.eventbus.client.json.JsonCodec;
import java.io.IOException;
import java.lang.reflect.UndeclaredThrowableException;
import java.time.Instant;
import java.util.Base64;
import static java.time.format.DateTimeFormatter.ISO_INSTANT;
public class VertXJsonCodec extends JsonCodec {
private final ObjectMapper mapper = new ObjectMapper();
public VertXJsonCodec() {
SimpleModule module = new SimpleModule();
// VertX Core Json types
module.addSerializer(JsonObject.class, new JsonSerializer<JsonObject>() {
@Override
public void serialize(JsonObject value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeObject(value.getMap());
}
});
module.addSerializer(JsonArray.class, new JsonSerializer<JsonArray>() {
@Override
public void serialize(JsonArray value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeObject(value.getList());
}
});
// he have 2 extensions: RFC-7493
module.addSerializer(Instant.class, new JsonSerializer<Instant>() {
@Override
public void serialize(Instant value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeString(ISO_INSTANT.format(value));
}
});
module.addSerializer(byte[].class, new JsonSerializer<byte[]>() {
private final Base64.Encoder BASE64 = Base64.getEncoder();
@Override
public void serialize(byte[] value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeString(BASE64.encodeToString(value));
}
});
mapper.registerModule(module);
}
@Override
public String encode(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new UndeclaredThrowableException(e);
}
}
@Override
public <T> T decode(String json, Class<T> type) {
try {
return mapper.readValue(json, type);
} catch (IOException e) {
throw new UndeclaredThrowableException(e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment