Как сделать лучший запрос класса DTO? - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно создать класс DTO, представляющий тело запроса JSON.

Я бы хотел сделать его полностью неизменным с полями final. Я уже видел реализации, основанные на @JSONCreator конструкторе всех аргументов, но мне также нужна еще одна возможность.

Класс DTO должен быть гибким и допускать некоторые пропущенные поля в запросе, а также обеспечивать наличие всех необходимых свойств.

Не могли бы вы привести пример такого DTO, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Джексон автоматически обработает пропущенные поля и просто установит для этих полей значение null.

В нем также есть некоторые параметры конфигурации, касающиеся того, следует ли при сериализации ответов указывать пустые поля или устанавливать специальное значение null.

objectMapper.setSerializationInclusion(Include.NON_NULL);

В другой заметке, если вы разрабатываете API, вы можете захотеть взглянуть на Swagger / OpenAPI и декларативно определить свой API (вы можете указать, является ли поле необязательным или обязательным). Затем используйте инструменты codegen для автоматической генерации ваших DTO. (Они будут следовать лучшим шаблонам, а также предложат установщики стилей Fluent API).

1 голос
/ 02 июня 2019

Как @jbx указал, что Джексон автоматически обрабатывает пропущенные поля и устанавливает для него null.

Если вы хотите, чтобы обязательные поля были заполнены, вам нужно пометить их как @javax.annotation.Nonnull или lombok.NonNull.

При использовании этого Джексона выбрасывает NullPointerException, если это поле имеет значение null при десериализации запроса в класс DTO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...