栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

杰克逊反序列化错误处理

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

杰克逊反序列化错误处理

感谢Jackson
Jackson的Tatu
,我成功解决了我的问题。

对于在Jackson中处理的每个原始类型,我必须使用自定义非阻塞解串器。像这样的工厂:

public class JacksonNonBlockingObjectMapperFactory {        private static class NonBlockingDeserializer<T> extends JsonDeserializer<T> {        private StdDeserializer<T> delegate;        public NonBlockingDeserializer(StdDeserializer<T> _delegate){ this.delegate = _delegate;        }        @Override        public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { try {     return delegate.deserialize(jp, ctxt); }catch (JsonMappingException e){     // If a JSON Mapping occurs, simply returning null instead of blocking things     return null; }        }    }    private List<StdDeserializer> jsonDeserializers = new ArrayList<StdDeserializer>();    public ObjectMapper createObjectMapper(){        ObjectMapper objectMapper = new ObjectMapper();        SimpleModule customJacksonModule = new SimpleModule("customJacksonModule", new Version(1, 0, 0, null));        for(StdDeserializer jsonDeserializer : jsonDeserializers){ // Wrapping given deserializers with NonBlockingDeserializer customJacksonModule.addDeserializer(jsonDeserializer.getValueClass(), new NonBlockingDeserializer(jsonDeserializer));        }        objectMapper.registerModule(customJacksonModule);        return objectMapper;    }    public JacksonNonBlockingObjectMapperFactory setJsonDeserializers(List<StdDeserializer> _jsonDeserializers){        this.jsonDeserializers = _jsonDeserializers;        return this;    }}

然后以这种方式调用它(仅将要成为非阻塞对象的那些作为反序列化器传递):

JacksonNonBlockingObjectMapperFactory factory = new JacksonNonBlockingObjectMapperFactory();factory.setJsonDeserializers(Arrays.asList(new StdDeserializer[]{    // StdDeserializer, here, comes from Jackson (org.prehaus.jackson.map.deser.StdDeserializer)    new StdDeserializer.ShortDeserializer(Short.class, null),    new StdDeserializer.IntegerDeserializer(Integer.class, null),    new StdDeserializer.CharacterDeserializer(Character.class, null),    new StdDeserializer.LongDeserializer(Long.class, null),    new StdDeserializer.FloatDeserializer(Float.class, null),    new StdDeserializer.DoubleDeserializer(Double.class, null),    new StdDeserializer.NumberDeserializer(),    new StdDeserializer.BigDecimalDeserializer(),    new StdDeserializer.BigIntegerDeserializer(),    new StdDeserializer.CalendarDeserializer()}));ObjectMapper om = factory.createObjectMapper();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号