Java Jackson:使用json字符串部分更新bean

Java Jackson:使用json字符串部分更新bean,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我正在编写一个测试套件,其中包括ping一个具有不同负载的API。下面是示例有效负载(示例): 我在json文件中编写了上述有效负载,测试套件执行以下操作: 读取json文件并为有效负载创建bean 发送POST请求 断言响应 现在,我需要用不同的值组合测试同一个API,例如美国地区、低可用性、低容量等。该请求有许多其他参数,但只有上面的参数发生变化。要测试这一点,我可以执行以下操作: 为每个场景创建一个json文件 只创建一个json文件,将其反序列化并将组合存储到另一个文件中,如下所示

我正在编写一个测试套件,其中包括ping一个具有不同负载的API。下面是示例有效负载(示例):

我在
json
文件中编写了上述有效负载,测试套件执行以下操作:

  • 读取
    json
    文件并为有效负载创建bean
  • 发送
    POST
    请求
  • 断言响应
现在,我需要用不同的值组合测试同一个API,例如美国地区、低可用性、低容量等。该请求有许多其他参数,但只有上面的参数发生变化。要测试这一点,我可以执行以下操作:

  • 为每个场景创建一个
    json
    文件
  • 只创建一个
    json
    文件,将其反序列化并将组合存储到另一个文件中,如下所示:
然后我可以读取这个文件,在每次发送请求之前更新基本对象

第一种方法的问题是,我最终会得到大量90%重复内容的文件。对于第二种方法,jackson是否提供API来反序列化基本对象并应用我上面提到的更改

对于第二种方法,Jackson是否提供API来反序列化基本对象并应用我上面提到的更改

杰克逊提供了一些可能对你有用的东西。我不知道您是如何构造测试的,但有一种可能的方法可以使用,因为它允许在bean中注入值

您可以按如下方式定义模型类:

@数据
公共类有效载荷{
私人位置;
@JsonProperty(“附加参数”)
私有附加参数附加参数;
}
@数据
公共类位置{
@JacksonInject(“区域”)
私有字符串区域;
}
@数据
公共类附加参数{
@JacksonInject(“可用性”)
私有字符串可用性;
@JacksonInject(“体积”)
私有字符串卷;
}
然后你可以使用:

String json=“{\n”
+“\”位置\:{},\n”
+“\”附加参数\“:{}\n”
+ "  }";
ObjectMapper mapper=新的ObjectMapper();
setInjectableValues(newinjectableValues.Std()
.addValue(“地区”、“欧盟”)
.addValue(“可用性”、“高”)
.addValue(“体积”、“低”)
);
Payload Payload=mapper.readValue(json,Payload.class);
{
   "param_1" : "value_1",
   "param_2" : "value_2",
   "param_3" : "value_3",
   "param_4" : "value_4",
   "param_5" : "value_5",
   "location" : {
        "region" : "EU"
   },
   "additional_params" : {
        "availability" : "high",
        "volume" : "low"
   }
}
[
  {
    "location": {
        "region": "US"
    },
    "additional_params" : {
        "availability" : "high",
        "volume" : "high"
    }
  },
  {
    "location": {
        "region": "EU"
    },
    "additional_params" : {
        "availability" : "low",
        "volume" : "low"
    }
  }
]