我最近加入了Web服务世界,并开始致力于使用json输入创建和更新休眠实体。
以下api将json输入转换为新的pojo对象:
Pojo newObject=mapper.readValue(jsonInput,Pojo.class);
这与创建api一起很好地工作。
现在如何更新api:
我有一个很大的pojo,并且我不想进入将来自json输入的每个值设置为pojo对象的长方法
我想要类似的东西
Pojo existingPojo=getFromDatabase();
existingPojo=mapper.readValue(updateJsonValues,existingPojo);
saveToDatabase(existingPojo);
所以无论updateJsonValues具有什么属性,它们都将被更新到existingPojo中。
这将是很大的帮助。谢谢您。
答案 0 :(得分:1)
故事是ObjectMapper
之类的东西始终都在做,没有其他方法:首先实例化一个对象,然后从JSON更新它。
唯一的障碍是没有readValue()
之类的快捷方式(可能是updateValue()
之类的东西,所以它的字符长了几个,您需要使用readerForUpdating()
来获得合适的阅读器,然后是其readValue()
:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
public String message="Nope";
public String target="Nope";
public String toString() {
return message+" "+target+"!";
}
public static void main(String[] args) throws Exception {
Test test=new Test();
System.out.println(test);
ObjectMapper mapper=new ObjectMapper();
mapper.readerForUpdating(test).readValue("{\"message\":\"Hello\"}");
System.out.println(test);
mapper.readerForUpdating(test).readValue("{\"target\":\"World\"}");
System.out.println(test);
}
}
输出:
Nope Nope! Hello Nope! Hello World!
ObjectReader reader=mapper.readerForUpdating(test);
reader.readValue("{\"message\":\"Hello\"}");
System.out.println(test);
reader.readValue("{\"target\":\"World\"}");
System.out.println(test);
答案 1 :(得分:0)
我遇到了同样的问题,在深入研究之后,我遇到了一个开放源代码库MapStruct。它有助于Java Bean映射,并在应用程序启动时为您生成代码。对我来说很好。放手吧。