package io.dropwizard.metrics.influxdb.utils;
import java.io.IOException;
import java.util.Map;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import io.dropwizard.metrics.influxdb.data.InfluxDbWriteObject;
public class InfluxDbWriteObjectSerializer {
protected static class MapSerializer<P, Q> extends JsonSerializer<Map<P, Q>> {
@Override
public void serialize(final Map<P, Q> influxDbMap, final JsonGenerator jsonGenerator, final SerializerProvider provider)
throws IOException {
if (influxDbMap != null) {
jsonGenerator.writeStartObject();
for (Map.Entry<P, Q> entry : influxDbMap.entrySet()) {
jsonGenerator.writeFieldName(entry.getKey().toString());
jsonGenerator.writeObject(entry.getValue());
}
jsonGenerator.writeEndObject();
}
}
}
private final ObjectMapper objectMapper;
public InfluxDbWriteObjectSerializer() {
objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
final SimpleModule module = new SimpleModule("SimpleModule", new Version(1, 0, 0, null, null, null));
module.addSerializer(Map.class, new MapSerializer());
objectMapper.registerModule(module);
}
public String getJsonString(InfluxDbWriteObject influxDbWriteObject) throws Exception {
return objectMapper.writeValueAsString(influxDbWriteObject);
}
}