首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson2自定义反序列化程序工厂

Jackson2自定义反序列化程序工厂
EN

Stack Overflow用户
提问于 2012-04-13 00:56:47
回答 4查看 5.1K关注 0票数 6

我正在将jackson 1.6代码移植到jackson 2上,偶然发现了一个被弃用的代码。

我在jackson 1.6中做的是:

代码语言:javascript
复制
CustomDeserializerFactory sf = new CustomDeserializerFactory();
mapper.setDeserializerProvider(new StdDeserializerProvider(sf));
sf.addSpecificMapping(BigDecimal.class, new BigDecimalDeserializer());
t = mapper.readValue(ts, X[].class);

有人知道在jackson 2里怎么做吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-14 00:43:26

在Jackson 2.0中:

  1. 创建一个Module (通常使用它来创建自定义处理程序。
  2. 调用ObjectMapper.registerModule(module);.

这在Jackson 1.x上也是可用的(从1.8开始)。

票数 1
EN

Stack Overflow用户

发布于 2015-01-04 21:27:58

要添加工厂--不仅仅是反序列化程序--不要使用SimpleModule。创建您自己的Module,并在其中创建一个添加到SetUpContext中的Deserializers对象。Deserializers对象将可以访问工厂所做的类似方法,在这些方法中,您可以获得有关所需反序列化程序的额外类型信息。

它看起来像这样(请注意,它不需要是内部类):

代码语言:javascript
复制
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;
    }

    ...
}
}
票数 3
EN

Stack Overflow用户

发布于 2013-03-03 18:56:53

以下是在Jackson 2.x中注册模块(在本例中为Joda日期处理)的示例:

代码语言:javascript
复制
    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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10128202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档