문제
- 회원의 전체 목록을 조회하는 API (5점)
- 한 회원의 userId를 주었을때 회원 정보를 조회하는 API (5점)
- 회원 목록 DB
- userId : 회원 번호 (DB 인덱스)
- name (String) : 회원 이름
- email (String) : 회원 아이디
- pw (String) : 회원 비밀번호
- User 테이블을 그대로 반환하지 않고 생성자를 사용하여 DTO로 변환한 후 반환하세요.
- Exception은 NullPointerException 를 사용하세요.
스켈레톤 코드가 주어졌고, 해당 스켈레톤 코드의 빈 칸을 채우면 되는 문제였다.
일단 클래스를 만든 후 컨트롤러부터 완성해줬다.
package com.sparta.test.controller;
import com.sparta.test.service.UserService;
import dto.UserResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
/**
* 한 회원의 userId를 주었을 때 회원 정보를 조회하는 API
// @param id
* @return 회원 정보
*/
@GetMapping("/user/{userId}")
public UserResponseDto getUserInfo(@PathVariable Long userId) {
return userService.findUser(userId);
}
/**
* 회원의 전체 목록을 조회하는 API
*/
@GetMapping("/user")
public List<UserResponseDto> getUserList() {
return userService.findAllUser();
}
}
- UserService 받기 위해 @RequiredArgsConstructor 어노테이션이 사용 -> Lombok의 @RequiredArgsConstructor를 통해 생성자 주입을 자동으로 생성함
- @GetMapping("/user/{userId}")을 사용해 HTTP GET 요청을 처리함. -> userId를 받아서 해당 유저의 정보를 조회하고 반환
- 위와 동일 하지만, 모든 유저의 정보를 조회하여 리스트로 반환하는 점만 다름
그 후 UserResponseDto에 내용을 채웠다.
package dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class UserResponseDto {
private Long userId;
private String name;
private String email;
private String pw;
public UserResponseDto(Long userId, String name, String email, String pw) {
this.userId = userId;
this.name = name;
this.email = email;
this.pw = pw;
}
}
그 다음 UserService 인데, 여기 부분이 조금 어려웠다.
애초에 스트림을 사용할 줄 몰랐는데, 저번주 과제하면서 써야했기 때문에 급하게 찾아서 썼었다.ㅠㅠ
코드 리뷰도 하긴 했었는데 그래도 어려운 스트림..
오늘도 사용을 해야할 것 같아서 찾다가 스트림 map 이라는 것을 발견했다!!
package com.sparta.test.service;
import dto.UserResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public UserResponseDto findUser(Long userId) {
// 주어진 id로 사용자 조회
Optional<User> userOptional = userRepository.findById(userId);
// 사용자가 존재하는 경우
if (userOptional.isPresent()) {
User user = userOptional.get();
return new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw());
} else {
// 존재하지 않는 경우
throw new NullPointerException("존재하지 않는 아이디 : " + userId);
}
}
public List<UserResponseDto> findAllUser() {
// 모든 사용자를 조회해서 리스트로 반환
List<User> userList = userRepository.findAll();
return userList.stream()
.map(user -> new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw()))
.collect(Collectors.toList());
}
}
- userList.stream(): userList를 스트림으로 변환
- .map(user -> new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw()))
- : 각각의 User 객체를 UserResponseDto 객체로 변환 -> User 객체의 필드를 사용해 새로운 UserResponseDto 객체를 생성함
- .collect(Collectors.toList()): 변환된 UserResponseDto 객체들을 리스트로 수집하고 List<UserResponseDto>를 반환.
PostMan에서 실행해보고 싶어서 필요한 클래스들 더 만들어 줬다.
일단 되는 것 같긴하다!!
시험 7점 이상이 통과라는데 조금 쫄린다ㅠㅠ
제발 패스~~~~~~
'항해99 > 시험 리뷰' 카테고리의 다른 글
[항해99] Spring 주특기3 시험 리뷰 (0) | 2024.03.13 |
---|---|
[항해99] Spring 주특기2 시험 리뷰 (0) | 2024.03.13 |
[항해99] 기초 프로그래밍2 시험 리뷰 (0) | 2024.02.19 |