Я должен разобрать следующий JSON. У меня есть два решения, и я пытаюсь решить, какой подход предпочтительнее.
{
"created": true,
"entries": [{
"NewValue": "test1",
"Operation": "ADD",
"FieldIdentifier": "name",
"FieldType": "AN",
"FieldLength": 35,
"OriginalValue": ""
},
{
"NewValue": "test2",
"Operation": "ADD",
"FieldIdentifier": "age",
"FieldType": "AN",
"FieldLength": 35,
"OriginalValue": "testOrig"
}]
}
Решение 1. Используйте readTree, чтобы получить JSON в объект JsonNode, который мы можем запросить, а затем преобразовать в список
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonObject = mapper.readTree(form.getFieldList());
ArrayNode fieldListArray = (ArrayNode) jsonObject.get("fieldList");
if (fieldList != null) {
FieldDefType[] listOfFieldDefs = mapper.convertValue(fieldList, FieldDefType[].class);
if (listOfFieldDefs != null) {
request.setFieldList(Arrays.asList(listOfFieldDefs));
}
}
Решение 2. Используйте TypeReference для сопоставления объекта JSON с объектом POJO, а затем извлекайте из него мои поля.
FieldListModel fieldListModel = new FieldListModel();
ObjectMapper mapper = new ObjectMapper();
fieldListModel = mapper.readValue(form.getFieldList(), new FieldListTypeReference());
request.setFieldList(fieldListModel.getEntries());
// At bottom of this class I have my named static inner class - Sonar scan requested this
static class FieldListTypeReference extends TypeReference<FieldListModel> {}
Я склоняюсь к решению 1, так как нет необходимости в именованном статическом внутреннем классе, и я слышал по переполнению стека, что TypeReference работает медленно. Единственные проблемы с решением 1, о которых я могу думать, - это необходимость в дополнительных проверках нуля и большем количестве строк кода.