将JSON映射到现有的pojo对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将JSON映射到现有的pojo对象相关的知识,希望对你有一定的参考价值。

我最近加入了Web服务世界,并开始使用json输入创建和更新hibernate实体。

以下api将json输入转换为新的pojo对象:

Pojo newObject=mapper.readValue(jsonInput,Pojo.class);

这与创建apis很好地配合。

那么更新apis呢:

我有一个很大的pojo,我不想进入long方法将每个值设置为json输入的pojo对象

我想要的东西:

Pojo existingPojo=getFromDatabase();

existingPojo=mapper.readValue(updateJsonValues,existingPojo);

saveToDatabase(existingPojo);

因此,无论updateJsonValues具有什么属性,它们都会更新为existingPojo。

这将是很大的帮助。谢谢你提前。

答案

故事是,这就是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!


Edit: if it is needed repeatedly, the reader can be stored and re-used of course:
ObjectReader reader=mapper.readerForUpdating(test);
reader.readValue("{"message":"Hello"}");
System.out.println(test);
reader.readValue("{"target":"World"}");
System.out.println(test);
另一答案

我遇到了同样的问题,经过大量的挖掘后,我遇到了一个开源库MapStruct。它有助于java bean映射,并在应用程序启动时为您生成代码。它对我来说很好。搏一搏。

以上是关于将JSON映射到现有的pojo对象的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 不会将新的 JSON 对象附加到现有的 Json 文件中

Android:将 json 值映射到 pojo

使用 Groovy 将 json 附加到现有的 json 文件中

格瑞斯 GORM。将映射添加到现有的休眠映射

创建新的节点并添加到现有的节点树上

附加到现有的json文件