Преобразование 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 дает вам больше контроля над процессом, и вам не нужно менять классы службы/персистентности каждый раз, когда изменяется какая-либо логика, заполняющая сущность.