Я создаю тестовый сервис, который будет выводить различия между моделями.У меня нет доступа для изменения модели, и одно из свойств - это многомерный список.Я пытаюсь создать собственный компаратор свойств, который будет обрабатывать это поле.
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 (поскольку это большой объект со многими свойствами).