728x90
역할
: Entity 클래스와 DTO 클래스를 변환해주는 역할
구조
1. @Component로 Bean 등록
2. 요청용은 Dto를 받아서 Entity로 변환해주는 메서드 작성 (Dto => Entity / 역직렬화)
public Entity dtoToEntity (DTO dto) {
return new Entity(
// 식별자인 Id의 경우 자동생성된다.
dto.get필드명(),
...
dto.get필드명()
);
}
3. 응답용은 Entity를 받아서 Dto로 변환해주는 메서드 작성 (Entity => Dto / 직렬화)
public Dto entityToDto (Entity entity) {
return new Dto(
entity.getId(),
entity.get필드명(),
...
entity.get필드명()
);
}
4. 또는 인터페이스로 매퍼를 만들고, @Mapper(componentmodel="spring")을 적용하는 방법이 있다.
@Mapper(componentModel = "spring")
public interface Mapper {
Entity DtoToEntity(Dto dto);
...
Dto EntityToDto(Entity entity);
...
List<ResponseDto> EntityToResponseDtos(List<Entity> entitys); // 페이지 네이션 적용시 필요
}
* 매퍼 내 각 메서드에 맞게 Dto클래스를 만들어 줘야 한다. (Dto타입의 객체를 불러오기 위해)
ex) EntityPostDto, EntityPatchDto, EntityResponseDto 등
예제 코드
더보기
@Mapper(componentModel = "spring")
public interface TodoMapper {
Todo todoPostDtoToTodo(TodoPostDto todoPostDto);
Todo todoPatchDtoToTodo(TodoPatchDto todoPatchDto);
TodoResponseDto todoToTodoResponseDto(Todo todo);
List<TodoResponseDto> todoToTodoResponseDtos(List<Todo> todos);
}
*반드시 Dto 클래스를 만들어 주고, controller클래스를 보정해야한다
템플릿 코드
@Mapper(componentModel = "spring")
public interface Mapper {
Entity entityPostDtoToEntity(EntityPostDto entityPostDto);
Entity entityPatchDtoToEntity(EntityPatchDto entityPatchDto);
ResponseDto entityToResponseDto(Entity entity);
List<ResponseDto> entityToResponseDtos(List<Entity> entitys);
}
참고 자료
728x90
'Java & Spring > 프로젝트 기본 설정' 카테고리의 다른 글
[SpringMVC] 기본 구조 (0) | 2022.10.18 |
---|---|
[SpringBoot] Service (진행중) (0) | 2022.10.17 |
[SpringBoot] 유효성 검사 (0) | 2022.10.11 |
[SpringBoot] DTO (0) | 2022.10.10 |
[SpringBoot] Controller (0) | 2022.10.09 |