본문 바로가기

스프링 스터디

회원 전체 조회 및 상세 조회 / 2022-02-08

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의 형식으로 바꿔준다.  

 

 

 


 

 

 

🔗 : ISSUES #9 회원 전체 기능 조회

🔗 : ISSUES #11 회원 상세 기능 조회

🔗 : Spring Study