1 回答

TA貢獻1836條經驗 獲得超3個贊
這不是問題的答案,但我最初的目標是:
我正在嘗試將 Json 反序列化為我進程中的現有實例。因此,如果不存在,它只會創建一個新實例。所有對象都包含一個 id 來識別它們。
對于每個嘗試完成相同任務的人,以下是我的實現方式:
public class ModelInstantiator extends StdValueInstantiator {
private static final long serialVersionUID = -7760885448565898117L;
private Class<? extends ModelObject> clazz;
/**
* @param config
* @param valueType
*/
public ModelInstantiator(DeserializationConfig config, Class<? extends ModelObject> clazz) {
super(config, config.constructType(clazz));
this.clazz = clazz;
}
@Override
public boolean canCreateFromObjectWith() {
return true;
}
@Override
public Object createFromObjectWith(DeserializationContext ctxt, Object[] args) throws IOException, JsonProcessingException {
UUID id = (UUID) args[0];
// get local object
ModelObject object = ...
// if id was not found => create and add
if (object == null) {
try {
object = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new IOException(e);
}
object.setId(id);
// add to local list
...
}
return object;
}
@Override
public SettableBeanProperty[] getFromObjectArguments(DeserializationConfig config) {
CreatorProperty idProp = new CreatorProperty(new PropertyName("id"), config.constructType(UUID.class), null, null, null, null,
0, null, PropertyMetadata.STD_REQUIRED);
return new SettableBeanProperty[] { idProp };
}
}
我不得不拆分本地和 json id。Ohterwise 數組中的 id 為空。
添加回答
舉報