qbit
qbit copied to clipboard
ENHANCE: ADD SUPPORT FOR JACKSON AND GSON #45
I'm trying to use Jackson with Qbit. So far this is what I have.
Service code:
EndpointServerBuilder serverBuilder = managedServiceBuilder
.addEndpointService(serviceObject)
.getEndpointServerBuilder()
.setJsonMapper(new JacksonMapper());
serverBuilder
.setFactory(new AltQbitFactory());
serverBuilder
.build()
.startServer();
JacksonMapper.java
public class JacksonMapper implements JsonMapper {
private static final ObjectMapper objectMapper = ObjectMapperConfiguration.getObjectMapper();
public JacksonMapper() {
System.out.println("Jackson Mapper Instantiated!");
}
@Override
public Object fromJson(String json) {
try {
return objectMapper.readValue(json, Object.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public <T> T fromJson(String json, Class<T> cls) {
TypeReference<T> typeReference = new TypeReference<T>() {
@Override
public Type getType() {
return cls;
}
};
try {
return objectMapper.readValue(json, typeReference);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public <T> List<T> fromJsonArray(String json, Class<T> componentClass) {
TypeReference<List<T>> typeReference = new TypeReference<List<T>>() {
@Override
public Type getType() {
return componentClass;
}
};
try {
return objectMapper.readValue(json, typeReference);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public String toJson(Object object) {
try {
return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public <K, V> Map<K, V> fromJsonMap(String json, Class<K> componentClassKey, Class<V> componentClassValue) {
// SimpleModule module = new SimpleModule();
// module.addKeySerializer(Date.class, new DateAsTimestampSerializer());
return null;
}
}
AltQbitFactory.java
public class AltQbitFactory extends BoonQBitFactory {
@Override
public JsonMapper createJsonMapper() {
return new JacksonMapper();
}
}
Everything get instantiated correctly, however when the request arrives, and StandardRequestTransformer#transform is called from HttpRequestServiceServerHandlerUsingMetaImpl#handleRestCall BoonJsonMapper is invoked even though I'm registering Jackson mapper and factory.
Any pointers will be really helpful.
Send a pull request and I will add support. I'd love to have support for GSON and Jackson.