将JSON映射到现有的pojo对象

时间:2018-11-15 12:33:11

标签: java json jackson

我最近加入了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中。

这将是很大的帮助。谢谢您。

2 个答案:

答案 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映射,并在应用程序启动时为您生成代码。对我来说很好。放手吧。