gpt4 book ai didi

java - 如何从 Json 对象更新 Java (Ebean) 对象

转载 作者:行者123 更新时间:2023-12-02 10:58:07 24 4
gpt4 key购买 nike

我已经知道如何使用以下代码从 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) 形式的简单“集合”?

最佳答案

如果有人感兴趣,这就是我最终所做的。小实用方法,使用 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));

关于java - 如何从 Json 对象更新 Java (Ebean) 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com