728x90
한것들
- 항해 99 스프르이 숙련 주차 1,2주차 강의듣기
- 1주차 복습 및 강의내용 읽기
- 목요일마다 시험(항해99는 목요일 마다 시험을 본다)
시험문제
유저를 조회하는 API 개발
UserController
package com.example.sparta.controller;
import com.example.sparta.dto.UserResponseDto;
import com.example.sparta.service.UserService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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
*/
@GetMapping("/user/{id}")
public ResponseEntity<UserResponseDto> getUserInfo(@PathVariable Long id, HttpServletResponse res) {
try {
UserResponseDto user = userService.findUser(id, res);
return new ResponseEntity<>(user,HttpStatus.OK);
} catch (NullPointerException e) {
res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return null;
}
}
/**
* 회원의 전체 목록을 조회하는 API
*/
@GetMapping("/user")
public List<UserResponseDto> getUserList() {
return userService.findAllUser();
}
}
UserResponseDto
package com.example.sparta.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class UserResponseDto {
private Long id;
private String name;
private String email;
private String pw;
public UserResponseDto(Long id, String name, String pw, String email) {
this.id = id;
this.name = name;
this.pw = pw;
this.email = email;
}
}
UserService
package com.example.sparta.service;
import com.example.sparta.dto.UserResponseDto;
import com.example.sparta.repository.UserRepository;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public UserResponseDto findUser(Long id, HttpServletResponse res) throws NullPointerException {
return userRepository.findById(id, res);
}
public List<UserResponseDto> findAllUser() {
return userRepository.findAll();
}
}
UserRepository
package com.example.sparta.repository;
import com.example.sparta.dto.UserResponseDto;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate;
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public UserResponseDto findById(Long id, HttpServletResponse res) {
//DB 조회
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate.query(sql, resultSet -> {
if(resultSet.next()) {
UserResponseDto userResponseDto = new UserResponseDto();
userResponseDto.setId(resultSet.getLong("id"));
userResponseDto.setPw(resultSet.getString("pw"));
userResponseDto.setEmail(resultSet.getString("email"));
userResponseDto.setName(resultSet.getString("name"));
return userResponseDto;
} else {
throw new NullPointerException();
}
}, id);
}
public List<UserResponseDto> findAll() {
// DB 조회
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, new RowMapper<UserResponseDto>() {
@Override
public UserResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
Long id = rs.getLong("id");
String name = rs.getString("name");
String pw = rs.getString("pw");
String email = rs.getString("email");
return new UserResponseDto(id, name, pw, email);
}
});
}
}
시험을 보고 난 후
JDBC템플릿을 복습하고자 JDBC템플릿을 사용해서 디비 조회를 했고
그리고 예외처리가 좀 힘들었다 NullPointerException을 상태코드를 500에러가 아닌 400에러로 반환하라는 것이였다. 그래서 NullPointerException 을 예외처리후 HttpServletResponse에서 setStatus함수를 이용해서SC_BAD_REQUEST코드를 보내줬다! 예외처리는했지만 상태코드를 바꾸는 법은 이번 시험을 통해서 빠삭하게 알은듯 따봉!
마무리
요즘 새로운걸 배운다는게 참 어려운거 같다. 강의듣느라 정리 못하고 또 새로운걸 배우고 어떻게 정리를 해야할지 모르고.. 내가 공부하고 이해한게 맞는지도 잘 모르겠고ㅠㅠ 그나마 다른 사람들이랑 공부한거 같이 보고 이야기해보면서 괜찮은듯 무튼 이번에는 스프링 숙련주차에 1주차 2주차 강의를 들었다. 강의를 듣고 공부한 내용은 추후에 정리하도록 하겠다.
'TIL > 2023' 카테고리의 다른 글
[WIL] 항해 3주차 (0) | 2023.07.02 |
---|---|
[TIL] 0627 ~ 0628 (0) | 2023.06.29 |
[0626] TIL (0) | 2023.06.27 |
[WIL] 항해 2주차 (0) | 2023.06.25 |
[0624] TIL (0) | 2023.06.25 |