Javers:Ignore 比较两个 json 时值对象中的特定字段
Javers:Ignore specific fields in Value Object while comparing two jsons
我正在尝试比较两个 json,预期的和 API 使用 Javers 的响应,作为测试的一部分。我希望比较排除响应动态生成的 ID 参数。
我的配音就像
public class expectedResponse{
@DiffIgnore
private String id;
private String name;
}
我从 excel 文件中读取的 expectedResponse- 和来自 API 的实际响应都被反序列化为这种格式,然后比较两个响应。
JsonNode expectedOutput = mapper.readTree(expected.toString());
JsonNode apiResponse = mapper.readTree(actual.toString());
diff=javers.compare(expectedOutput, apiResponse);
但此比较不会 exclude/ignore ID 字段。知道如何让它工作吗?我只想在比较结果中排除 ID 字段,应该列出名称差异。
还有问题 2> 我正在尝试列出来自 diff
的更改
if (diff.hasChanges())
{
List<ValueChange> changes=diff.getChangesByType(ValueChange.class);
for (ValueChange change : changes)
{
logger.info(change.getPropertyName()+ "||" +change.getLeft().toString() + "||" +change.getRight().toString());
change.getPropertyName()- 不打印 属性 的名称,而只是打印 "_value" 作为其值。
你能帮忙确定代码出了什么问题吗?我该如何解决这个问题?我在 google 的任何地方都找不到关于 Javers 的有用文档。感谢任何帮助。
您应该将您的域对象而不是对象与 JsonNode
class 进行比较,请注意 @DiffIgnore
注释仅存在于您的域 class 中并且没有任何联系在 JsonNode
和 ExpectedResponse
之间,这就是 Javers 不知道忽略此字段的原因。
总而言之,您的代码应如下所示:
ExpectedResponse expectedOutput = ...
ExpectedResponse apiResponse = ...
diff=javers.compare(expectedOutput, apiResponse);
我正在尝试比较两个 json,预期的和 API 使用 Javers 的响应,作为测试的一部分。我希望比较排除响应动态生成的 ID 参数。
我的配音就像
public class expectedResponse{
@DiffIgnore
private String id;
private String name;
}
我从 excel 文件中读取的 expectedResponse- 和来自 API 的实际响应都被反序列化为这种格式,然后比较两个响应。
JsonNode expectedOutput = mapper.readTree(expected.toString());
JsonNode apiResponse = mapper.readTree(actual.toString());
diff=javers.compare(expectedOutput, apiResponse);
但此比较不会 exclude/ignore ID 字段。知道如何让它工作吗?我只想在比较结果中排除 ID 字段,应该列出名称差异。
还有问题 2> 我正在尝试列出来自 diff
的更改if (diff.hasChanges())
{
List<ValueChange> changes=diff.getChangesByType(ValueChange.class);
for (ValueChange change : changes)
{
logger.info(change.getPropertyName()+ "||" +change.getLeft().toString() + "||" +change.getRight().toString());
change.getPropertyName()- 不打印 属性 的名称,而只是打印 "_value" 作为其值。
你能帮忙确定代码出了什么问题吗?我该如何解决这个问题?我在 google 的任何地方都找不到关于 Javers 的有用文档。感谢任何帮助。
您应该将您的域对象而不是对象与 JsonNode
class 进行比较,请注意 @DiffIgnore
注释仅存在于您的域 class 中并且没有任何联系在 JsonNode
和 ExpectedResponse
之间,这就是 Javers 不知道忽略此字段的原因。
总而言之,您的代码应如下所示:
ExpectedResponse expectedOutput = ...
ExpectedResponse apiResponse = ...
diff=javers.compare(expectedOutput, apiResponse);