我正在将jackson 1.6代码移植到jackson 2上,偶然发现了一个被弃用的代码。
我在jackson 1.6中做的是:
CustomDeserializerFactory sf = new CustomDeserializerFactory();
mapper.setDeserializerProvider(new StdDeserializerProvider(sf));
sf.addSpecificMapping(BigDecimal.class, new BigDecimalDeserializer());
t = mapper.readValue(ts, X[].class);有人知道在jackson 2里怎么做吗?
发布于 2012-04-14 00:43:26
在Jackson 2.0中:
Module (通常使用它来创建自定义处理程序。ObjectMapper.registerModule(module);.这在Jackson 1.x上也是可用的(从1.8开始)。
发布于 2015-01-04 21:27:58
要添加工厂--不仅仅是反序列化程序--不要使用SimpleModule。创建您自己的Module,并在其中创建一个添加到SetUpContext中的Deserializers对象。Deserializers对象将可以访问工厂所做的类似方法,在这些方法中,您可以获得有关所需反序列化程序的额外类型信息。
它看起来像这样(请注意,它不需要是内部类):
public class MyCustomCollectionModule extends Module {
@Override
public void setupModule(final SetupContext context) {
context.addDeserializers(new MyCustomCollectionDeserializers());
}
private static class MyCustomCollectionDeserializers implements Deserializers {
...
@Override
public JsonDeserializer<?> findCollectionDeserializer(final CollectionType type, final DeserializationConfig config, final BeanDescription beanDesc, final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer) throws JsonMappingException {
if (MyCustomCollection.class.equals(type.getRawClass())) {
return new MyCustomCollectionDeserializer(type);
}
return null;
}
...
}
}发布于 2013-03-03 18:56:53
以下是在Jackson 2.x中注册模块(在本例中为Joda日期处理)的示例:
ClientConfig clientConfig = new DefaultClientConfig();
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
JacksonJsonProvider provider = new JacksonJsonProvider();
provider.configure(SerializationFeature.INDENT_OUTPUT, true);
provider.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
provider.setMapper(mapper);
clientConfig.getSingletons().add(provider);
Client client = Client.create(clientConfig);https://stackoverflow.com/questions/10128202
复制相似问题