Created
October 13, 2017 12:28
-
-
Save PhilLehmann/bed9dbbf3cfa0bfe1f4dd15b870de597 to your computer and use it in GitHub Desktop.
VertXJsonCodec
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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