我已经知道如何使用以下代码从Json创建对象:
SomeClass someObject = Json.fromJson(someJsonNode, SomeClass.class);
我还知道如何对ebean对象执行save()
和update()
操作。
我想要做的是,从JsonNode中的数据更新现有的object ,如下所示:
SomeClass someObject = fetchMyObjectFromDb();
someObject.updateFromJson(someJsonNode);
或
SomeClass someObject = fetchMyObjectFromDb();
Json.updateFromJson(someJsonNode,someObject);
在我的特定情况下,对象是一个Ebean实体,这可能会有所帮助,但我没有找到任何从Ebean到Ebean的帮助器方法。
我的Json.*工具与Google Gson非常相似,但我也找不到我想要的东西。
我是否必须使用Java reflexion自己编写代码,或者有没有更简单的方法/工具来做到这一点?
编辑:我也很高兴有一种简单的方法来更新一个Ebean实体的多个属性。我找不到一个简单的myEbeanObject.set("attributeName",value)
形式的“集合”?
发布于 2018-07-30 17:20:29
如果有人感兴趣,这里是我最终要做的事情。小实用程序方法,使用java反射从同一类的其他java对象更新java对象:
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public <T> void updateObjFromObj(T objToUpdate, T objToUse)
throws IllegalAccessException {
Class<?> clazz = objToUpdate.getClass();
while (clazz != null) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (!Modifier.isStatic(field.getModifiers())) {
boolean accessible = field.isAccessible();
field.setAccessible(true);
if (field.get(objToUse) != null) {
field.set(objToUpdate, field.get(objToUse));
}
field.setAccessible(accessible);
}
}
clazz = clazz.getSuperclass();
}
}
仅当新值不为空时才更新字段。可以使用如下方式从Json更新ebean对象:
SomeClass someObjectToUpdate = fetchMyObjectFromDb();
SomeClass objectToUse = Json.fromJson(someJsonNode, SomeClass.class);
updateObjFromObj(someObjectToUpdate, objectToUse);
someObjectToUpdate.save();
编辑/更新:如果您使用它来更新ebean对象,则需要使用setter和getter来将更改持久保存到数据库中。
因此,您可以在字段循环之前添加以下内容:
PropertyAccessor objToUpdateAccessor = PropertyAccessorFactory.forBeanPropertyAccess(objToUpdate);
而不是:
field.set(objToUpdate, field.get(objToUse));
使用:
objToUpdateAccessor.setPropertyValue(field.getName(), field.get(objToUse));
https://stackoverflow.com/questions/51559829
复制相似问题