Преобразование DTO в entity и наоборот

Я использую Spring MVC архитектура JPA в моем веб-приложения.

где конвертировать DTO в entity и наоборот вручную (без использования какой-либо структуры)?

3 ответов


Я думаю, вы спрашиваете о том, где написать всю сущность-->DTO логика преобразования.

как сущности

class StudentEntity {
 int age ;
 String name;

 //getter
 //setter

 public StudentDTO _toConvertStudentDTO(){
    StudentDTO dto = new StudentDTO();
    //set dto values here from StudentEntity
    return dto;
 }

}

ваш DTO должен быть как

class StudentDTO  {
 int age ;
 String name;

 //getter
 //setter

 public StudentEntity _toConvertStudentEntity(){
    StudentEntity entity = new StudentEntity();
    //set entity values here from StudentDTO
    return entity ;
 }

}

и ваш контроллер должен быть как

@Controller
class MyController {

    public String my(){

    //Call the conversion method here like
    StudentEntity entity = myDao.getStudent(1);
    StudentDTO dto = entity._toConvertStudentDTO();

    //As vice versa

    }

}

Это старый вопрос с принятым ответом, но хотя обновить его с помощью простого способа сделать это с помощью API model-mapper.

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>0.7.4</version>
</dependency>

используя этот API, вы избегаете ручного сеттера и геттеров, как описано в принятом ответе.

на мой взгляд, оба преобразования должны происходить в контроллере с помощью методов частной утилиты и с использованием карты потока Java8 ( если обменивается коллекция DTOs), как показано в в этой статье.

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

вы кодируете свои слои доступа к службе и данным на сущностях и конвертируете DTOs в сущности перед вызовом методов службы и конвертируете сущности в DTOs перед возвращением ответа от контроллера.

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

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


по-моему

  • преобразование сущности - > DTO должно быть сделано в контроллере перед отправкой страницы jsp
  • преобразование DTO -> Entity должно быть сделано в контроллере, а также после проверки DTO, возвращенного со страницы jsp

Its дает вам больше контроля над процессом, и вам не нужно менять классы службы/персистентности каждый раз, когда изменяется какая-либо логика, заполняющая сущность.