User에 관한 정보를 Response 해줄 때 형식을 맞추기 위해 DTO를 사용하였다.
UserResponseDto
@Builder
@Getter
public class UserResponseDto {
private Long id;
private String user_id;
private String user_name;
private String user_password;
//of를 사용해 entity to of
public static UserResponseDto of(UserYwoo userYwoo){
return UserResponseDto.builder()
.id(userYwoo.getId())
.user_id(userYwoo.getUser_id())
.user_name(userYwoo.getUser_name())
.user_password(userYwoo.getUser_password())
.build();
}
}
형식
{
"id" : "1",
"user_id" : "ididid",
"user_name" : "name",
"user_password" : "password",
}
User의 정보를 반환하는 response는 Entity를 바로 반환하는 것이 아닌 Dto를 통해 반환한다.
UserYwooController
//회원 전체 조회
@GetMapping()
public List<UserResponseDto> findAllUser(){
return userYwooService.findAllUser();
}
//회원 상세 조회
@PostMapping("/{id}")
public UserResponseDto findUser(@PathVariable Long id){
return userYwooService.findUser(id);
}
- 회원 전체 조회는 모든 회원들의 정보를 반환하기 때문에 List를 사용한다. 또한 Dto를 사용하여 형식을 맞춰주었다.
- 회원 상세 조회는 조회할 id를 받아 해당하는 id를 가지는 User의 정보를 반환한다.
UserYwooService
@Transactional
public List<UserResponseDto> findAllUser(){
List<UserYwoo> users = (List<UserYwoo>)userRepository.findAll();
return users.stream()
.map(UserResponseDto::of)
.collect(Collectors.toList());
}
@Transactional
public UserResponseDto findUser(Long id){
UserYwoo userYwoo = userRepository.findById(id).orElseThrow();
return UserResponseDto.of(userYwoo);
}
- findAll의 return 타입은 all entity이다. return 타입이 dto가 되려면 UserYwoo to UserResponseDto가 되어야 한다. for문을 사용하여 하나씩 바꿔줄 수도 있지만, 속도가 느려 추천하지 않는다. 따라서 stream().map.().collect를 사용하여 변환해준다.
- findById의 return 타입은 Optional<T>이다. 그렇기 때문에 UserYwoo에 바로 넣을 수 없다. 하지만 orElseThrow()를 통해 UserYwoo 타입이 아니면 에러를 발생시킨다.
- of를 사용해 UserYwoo의 타입에 객체를 Dto의 형식으로 바꿔준다.
🔗 : Spring Study
'스프링 스터디' 카테고리의 다른 글
게시글 추가 기능 구현 / 2022-02-15 (0) | 2022.02.15 |
---|---|
1주차 스프링 스터디 회고록 (0) | 2022.02.14 |
Controller 전역 예외 처리(Custom Exception) / 2022-02-10 (0) | 2022.02.11 |
회원 정보 수정 / 2022-02-09 (2) | 2022.02.10 |
회원 삭제 기능 / 2022-02-07 (0) | 2022.02.08 |