Javers Custom Comparator на многомерном массиве - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю тестовый сервис, который будет выводить различия между моделями.У меня нет доступа для изменения модели, и одно из свойств - это многомерный список.Я пытаюсь создать собственный компаратор свойств, который будет обрабатывать это поле.

CodedDataElement.java

public class CodedDataElement implements Serializable {
    private boolean primary;
    private String code;
    private String display;

    // standard constructors, getters, and setters
}

EncounterBean.java

public class EncounterBean implements Serializable {

    ...

    private List<List<CodedDataElement>> itemCode;

    ...

    // standard constructors, getters, and setters

DiffProcessor.java

public class DiffProcessor{

    private static final Javers javers = JaversBuilder
            .javers()
            .build();

    ....

    public Diff process(final EncounterBean expected, final EncounterBean actual) {    
    return javers.compare(actual, expected);
    }

    ....

Я использовал те же данные и десериализовал их как в фактические, так и в ожидаемые bean-компоненты Encounter, и когда я распечатывал результат Diff (в формате json), я ожидал:

{
    "changes" : []
}

Вместо этого я получил:

{
    "changes": [
        {
            "commitMetadata": null,
            "changeType": "PROPERTY_VALUE_CHANGED",
            "propertyName": "itemCode",
            "changes": [
                {
                    "index": 0,
                    "leftValue": [
                        {
                            "primary": true,
                            "code": "1234",
                            "display": "Office"
                        },
                        {
                            "primary": false,
                            "code": "OFFICE",
                            "display": null
                        }
                    ],
                    "rightValue": [
                        {
                            "primary": true,
                            "code": "1234",
                            "display": "Office"
                        },
                        {
                            "primary": false,
                            "code": "OFFICE",
                            "display": null
                        }
                    ]
                }
            ],
            "valueRemovedChanges": [],
            "valueAddedChanges": [],
            "addedValues": [],
            "removedValues": [],

            ...

            "affectedObject": {
                ...
                "emCode": [
                    [
                        {
                            "primary": true,
                            "code": "1234",
                            "display": "Office"
                        },
                        {
                            "primary": false,
                            "code": "OFFICE",
                            "display": null
                        }
                    ]
                ],
                ...
            }
        }
    ]
}

РЕДАКТИРОВАТЬ:

В приведенных выше фрагментах нет CustomComparator, потому что я не знаю, как поймать список списка в пользовательском компараторе,

Я пытался создать CustomComparator только для списка, но он улавливает только самый высокий уровень списка, а EncounterBean отображается только в списке.

Я пытался указать, чтонаходится в списке, но тогда я не могу получить класс из параметризованного списка (т. е.

List<List<CodedDataElement>>.class

недопустим).

Я пытаюсь избежать создания CustomComparator дляПока EncounterBean (поскольку это большой объект со многими свойствами).

...