tar*_*rka 2 json jackson restlet-2.0 java-8
是否可以jackson-datatype-jdk8在Restlet org.restlet.ext.jackson扩展包中注册该模块?我需要利用这个新Optional功能.我的猜测是它应该可以通过转换器服务(getConverterService())来访问,但是我在文档中找不到任何可以确定如何设置模块的内容.
我最终从各种来源拼凑出一个与Restlet 2.3一起使用的答案.我的猜测是,这将被重构为Restlet 3,它不适用于版本<2.3,因此请注意,此解决方案很可能具有有限的保质期.
第一步是创建一个自定义Jackson转换器,它实现您拥有的任何自定义要求:
public class CustomJacksonConverter extends JacksonConverter {
@Override
protected <T> JacksonRepresentation<T> create(MediaType mediaType, T source) {
ObjectMapper mapper = createMapper();
JacksonRepresentation<T> jr = new JacksonRepresentation<T>(mediaType, source);
jr.setObjectMapper(mapper);
return jr;
}
@Override
protected <T> JacksonRepresentation<T> create(Representation source, Class<T> objectClass) {
ObjectMapper mapper = createMapper();
JacksonRepresentation<T> jr = new JacksonRepresentation<T>(source, objectClass);
jr.setObjectMapper(mapper);
return jr;
}
private ObjectMapper createMapper() {
JsonFactory jsonFactory = new JsonFactory();
jsonFactory.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
ObjectMapper mapper = new ObjectMapper(jsonFactory);
mapper.registerModule(new Jdk8Module());
return mapper;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要创建一种用新副本替换默认Jackson转换器的方法:
static void replaceConverter(
Class<? extends ConverterHelper> converterClass,
ConverterHelper newConverter) {
ConverterHelper oldConverter = null;
List<ConverterHelper> converters = Engine.getInstance().getRegisteredConverters();
for (ConverterHelper converter : converters) {
if (converter.getClass().equals(converterClass)) {
converters.remove(converter);
oldConverter = converter;
break;
}
}
converters.add(newConverter);
}
Run Code Online (Sandbox Code Playgroud)
您现在可以在入站根中替换转换器:
replaceConverter(JacksonConverter.class, new CustomJacksonConverter());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |