- 가끔 필요에 따라 Entity List를 DtoList로 변경해야 할 경우가 발생한다. 이 때 다음과 같이 하면 편리하다.
1. TodoDto
public class TodoDto {
private Long id; // 아이디
private String username; // 사용자 이름
private String description; // 할 일 내용
private LocalDate targetDate; // 목표 날짜
private boolean done; // 완료 여부
}
2. Todo
public class Todo extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "todo_id")
private Long id; // 아이디
private String username; // 사용자 이름
private String description; // 할 일 내용
private LocalDate targetDate; // 목표 날짜
private boolean done; // 완료 여부
}
3. 엔티티 리스트를 DTO 리스트로 변환
- map 을 사용하여 처리하면 간단히 해결할 수 있다.
public static List<TodoDto> toDtoList(List<Todo> todoList) {
return todoList.stream()
.map(todo -> TodoDto.builder()
.id(todo.getId())
.username(todo.getUsername())
.description(todo.getDescription())
.targetDate(todo.getTargetDate())
.done(todo.isDone())
.build())
.collect(Collectors.toList());
}
4. ModelMaper를 사용하는 경우
- 우선 의존성 추가
implementation 'org.modelmapper:modelmapper:3.2.0'
- Bean으로 등록
@Configuration // 설정 파일임을 선언
public class ModelConfig {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
- 일반적인 Dto -> Entity의 경우
Todo todo = modelMapper.map(todoDto, Todo.class);
- 리스트인 경우
List<Todo> todoList= repository.findAll();
List<TodoDto> resultDTO = todoList.stream()
.map(todo -> modelMapper.map(todo, TodoDto.class))
.collect(Collectors.toList());