java反序列化失败怎么处理_java – 杰克逊反序列化错误处理

我成功地解决了我的问题,谢谢

Tatu from Jackson ML.

我不得不为Jackson中处理的每个原始类型使用自定义的非阻塞解串器.

像这样的工厂:

public class JacksonNonBlockingObjectMapperFactory {

/**

* Deserializer that won't block if value parsing doesn't match with target type

* @param Handled type

*/

private static class NonBlockingDeserializer extends JsonDeserializer {

private StdDeserializer delegate;

public NonBlockingDeserializer(StdDeserializer _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 jsonDeserializers = new ArrayList();

public ObjectMapper createObjectMapper(){

ObjectMapper objectMapper = new ObjectMapper();

SimpleModule customJacksonModule = new SimpleModule("customJacksonModule",new Version(1,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 _jsonDeserializers){

this.jsonDeserializers = _jsonDeserializers;

return this;

}

}

然后以这种方式调用它(作为解串器传递只有那些你想要阻止的):

JacksonNonBlockingObjectMapperFactory factory = new JacksonNonBlockingObjectMapperFactory();

factory.setJsonDeserializers(Arrays.asList(new StdDeserializer[]{

// StdDeserializer,here,comes from Jackson (org.codehaus.jackson.map.deser.StdDeserializer)

new StdDeserializer.ShortDeserializer(Short.class,null),new StdDeserializer.IntegerDeserializer(Integer.class,new StdDeserializer.CharacterDeserializer(Character.class,new StdDeserializer.LongDeserializer(Long.class,new StdDeserializer.FloatDeserializer(Float.class,new StdDeserializer.DoubleDeserializer(Double.class,new StdDeserializer.NumberDeserializer(),new StdDeserializer.BigDecimalDeserializer(),new StdDeserializer.BigIntegerDeserializer(),new StdDeserializer.CalendarDeserializer()

}));

ObjectMapper om = factory.createObjectMapper();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值