개발

Page<Entity>에서 Page<DTO>로 전환

시간의 효율화 2022. 3. 14. 19:03

https://spring.io/guides/tutorials/rest/

 

Building REST services with Spring

this tutorial is designed to be completed in 2-3 hours, it provides deeper, in-context explorations of enterprise application development topics, leaving you ready to implement real-world solutions.

spring.io

 

Rest API의 HATEOAS를 구현하기 중에 Page<Entity>를 return 하니, 아이디와 비밀번호가 다 노출되는 상황이 발생했다. 

 

Page<Qna> qna = qnaService.getQnaAll(pageable);

PagedModel<Qna> qnaModel = pagedResourcesAssembler
        .toModel(qna, qnaModelAssembler);

return new ResponseEntity<>(qnaModel,HttpStatus.OK);

그래서 Page<Entity>를 Page<DTO>로 전환하는 작업이 필요했다. 

 

Page의 map메서드와 method reference operator 활용해서 해결했다. 

 

DTO클래스에 entity를 dto로 전환해주는 스새틱 메서드가 있어야 사용 가능하다. 

 

public class QnaResponseDto {
    private Long id;
    private String title;
    private String content;
    private String username;
    private String nickname;
    private List<QnaComment> comment;


    public static QnaResponseDto toDto(final Qna qna) {
        return QnaResponseDto.builder()
                .id(qna.getId())
                .title(qna.getTitle())
                .content(qna.getContent())
                .comment(qna.getComment())
                .nickname(qna.getUser().getNickname())
                .username(qna.getUser().getUsername())
                .build();

    }
}

 

아래처름 하니까 Page<Entity>에서 Page<DTO> 전환이 가능했다. 

Page<QnaResponseDto> qnaResponseDto = qnaService.getQnaAll(pageable).map(QnaResponseDto::toDto);

 

출처:

https://stackoverflow.com/questions/39036771/how-to-map-pageobjectentity-to-pageobjectdto-in-spring-data-rest

 

How to map Page<ObjectEntity> to Page<ObjectDTO> in spring-data-rest

When I hit the database with PagingAndSortingRepository.findAll(Pageable) I get Page<ObjectEntity>. However, I want to expose DTO's to the client and not entities. I can create DTO just by

stackoverflow.com