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);
출처:
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