我正在从Web服务收到JSON响应,但由于各种原因,我不希望在最终响应对象中反序列化某些属性。例如,我有:
public class Foo {
private String bar;
private int baz;
//getters & setters
}
我回来的JSON响应有两个属性,但在反序列化时我不想设置“bar”。原因是他们发送的属性很长,但我们的是一个String,所以反序列化会抛出IllegalArgumentException。
另一种选择是使用类似json-simple的东西解析JSON,删除我想要的属性,将其转换回JSON并将其传递给反序列化器,但是我想避免这种情况,因为JSON是非常大。
有没有办法用ObjectFactory做到这一点?
答案 0 :(得分:2)
是的,ObjectFactory可用于允许从Long转换为String。只需在您的路径上注册ObjectFactory,如:
new JSONDeserializer().use("some.path.to.bar", new EnhancedStringObjectFactory() ).deserialize( json, new SomeObject() );
public class EnhancedStringObjectFactory implements ObjectFactory {
public Object instantiate(ObjectBinder context, Object value, Type targetType, Class targetClass) {
if( value instanceof String ) {
return value;
} else if( value instanceof Number ) {
return ((Number)value).toString();
} else {
throw context.cannotConvertValueToTargetType(value, String.class);
}
}
}
您甚至可以将其注册为String的默认ObjectFactory,它将处理进入反序列化器的任何String的情况:
new JSONDeserializer().use( String.class, new EnhancedStringObjectFactory() ).deserialize( json, new SomeObject() );