Javers:在比较两个jsons时忽略Value Object中的特定字段

时间:2017-07-14 21:25:30

标签: diff javers

我正在尝试比较两个jsons,预期和使用Javers的API响应,作为测试的一部分。我希望比较排除响应动态生成的ID参数。

我的VO就像

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);

但是这种比较不排除/忽略ID字段。任何想法我怎么能让它工作?我只想在比较结果中排除ID字段,应列出名称中的差异。

问题2>我试图列出差异

的变化
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的有用的文档。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您应该将域对象而不是对象与JsonNode类进行比较,看看@DiffIgnore注释仅存在于您的域类中,并且JsonNode和{{1}之间没有关联这就是为什么Javers不知道忽略这个领域。

总结一下,您的代码应如下所示:

ExpectedResponse