我已经知道如何使用以下代码从Json创建对象:
SomeClass someObject = Json.fromJson(someJsonNode, SomeClass.class);
我也知道如何save()
和update()
一个ebean对象。
我想做的是从JsonNode中的数据更新一个现有对象,看起来像这样:
SomeClass someObject = fetchMyObjectFromDb();
someObject.updateFromJson(someJsonNode);
或
SomeClass someObject = fetchMyObjectFromDb();
Json.updateFromJson(someJsonNode,someObject);
在我的特定情况下,该对象是一个Ebean实体,也许可以帮上忙,但我没有找到从Ebean到该对象的任何辅助方法。
我的Json。*工具与Google Gson非常相似,但是我也找不到我想要的东西。
我是否必须使用Java自反进行编码,还是有一种更简单的方法/工具来做到这一点?
编辑:我也很愿意使用一种简单的方法来更新Ebean实体的多个属性。我找不到myEbeanObject.set("attributeName",value)
形式的简单“集合”?
答案 0 :(得分:1)
如果有人感兴趣,这就是我最后要做的。小型实用程序方法,使用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();
}
}
仅当新值不为null时更新字段。可以按照以下说明从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));
答案 1 :(得分:0)