Когда мы работаем над RESTful API, тело запроса и тело ответа - это общие термины, которые мы слышим каждый день. Говоря о теле запроса-ответа, мы обычно сериализуем и десериализуем это тело в объектный класс. Вопрос в том, что это за класс? Класс сущности или класс DTO?

В этом руководстве в качестве примера я использую Spring Boot.

Разные

«DTO или Data Transfer Objects - это объект, который переносит данные между процессами. Мотивация для его использования заключается в том, что связь между процессами обычно осуществляется с использованием удаленных интерфейсов (например, веб-служб), где каждый вызов является дорогостоящей операцией ».

Класс сущности - это класс объекта, который представляет сущности вашей базы данных, обычно мы используем для целей ORM.

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

Например, когда нам нужно добавить новый столбец (name: created_date) в нашу базу данных, мы должны добавить новый атрибут (name: createdDate) в наш класс сущности, потому что нам нужно для записи времени создания записи, но клиент, использующий наши API, не должен читать и записывать этот столбец. DTO может помочь вам скрыть createdDate от клиентов, и мы можем поддерживать правила.

Класс DTO и класс Entity несут разную ответственность. НЕ относите более одной ответственности к одному классу.

Руководство

source code: https://github.com/adrianaden/spring-boot-starter

Цели: мы создадим автоматический конвертер из DTO в Entity и позаботимся о том, чтобы уровень контроллера оставался простым и понятным 😎

DTO.java

создать аннотацию для объявления класса

RequestDTO.java

создать аннотацию @RequestDTO для объявления тела, а значение - класс DTO

Процессор и конфигурация

Это самый важный класс, этот класс преобразует DTO в класс сущности. На самом деле мне нужно унаследовать класс, используемый @RequestBody от Spring Boot, и переопределить какой-либо метод.

зарегистрируйтесь как преобразователь аргументов в вашем классе конфигурации

Реализация

Замените @RequestBody на @RequestDTO, и мы все равно получим очень чистый контроллер :)

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