Springboot
User 회원 가입 기능 만들기!
1.
클라이언트가 요청한 정보를 UserJoinRequest에 담아서 Controller >> Service 계층으로 보낸다.
2.
Service계층에서 해당 userName이 DB에 중복되는지 확인한다. (findByName)
a.
중복되면 Custom Exception인 HospitalReviewException 을 발생시킨다.
b.
중복이 아니면 해당 User를 Save한다.
3.
save된 User를 UserDto에 담아서 Controller에 보낸다.
4.
Controller에서는 UserJoinResponse로 담고 Response의 success메소드를 통해 Response 객체를 리턴하여 클라이언트에 응답한다.
•
resultCode : “Success”
•
result : UserJoinResponse정보
코드
Springboot 예외처리
userName이 중복일 경우 예외처리!
1.
중복이 되면 Service계층에서 HospitalReviewException 을 발생시킨다.
2.
ExceptionManager에서 해당 Exception을 처리하여 ResponseEntity를 클라이언트에 리턴한다.
•
enum으로 정의한 ErrorCode 정보와 Response의 error메소드를 활용
코드
예외가 발생하면 요청을 보낸 클라이언트에 어떤 문제가 발생했는지 상황 전달
>> 각 레이어에서 발생한 예외를 엔드포인트 레벨인 컨트롤러로 전달
@ControllerAdvice와 @RestControllerAdvice
•
Spring에서 제공하는 전역적으로 예외 처리할 수 있는 어노테이션
•
차이점 : @RestControllerAdvice는 @ResponseBody가 붙어 있어 응답을 Json으로 내려줌
•
해당 어노테이션이 붙은 클래스는 스프링 빈으로 등록됨 >> 에러 핸들링하는 클래스로 에러 처리 위임
장점
•
하나의 클래스로 모든 컨트롤러에 대해 전역적으로 예외 처리가 가능함
•
직접 정의한 에러 응답을 일관성있게 클라이언트에게 내려줄 수 있음
•
별도의 try-catch문이 없어 코드의 가독성이 높아짐
Enum
•
Enum : 관련있는 상수들의 집합, 열거형
•
비슷한 상수끼리 모은다.
◦
ex) DAY, MONTH
private final static int MONDAY = 1;
private final static int TUESDAY = 2;
Java
복사
enum MONTH{
JANUARY, FEBRUBY,,,
}
enum DAY{
MONDAY, TUESDAY, ..
}
Java
복사
@AllArgsConstructor
@Getter
public enum ErrorCode {
DUPLICATED_USER_NAME(HttpStatus.CONFLICT,"해당 userName이 중복 됩니다.");
private HttpStatus status;
private String message;
}
//enum 사용
ErrorCode.DUPLICATED_USER_NAME;
ErrorCode.DUPLICATED_USER_NAME.getStatus();
Java
복사
•
여러개의 필드값 사용 가능
◦
DUPLICATED_USER_NAME, HttpStatus.CONFLICT,"해당 userName이 중복 됩니다." 가 모두 같은 의미
•
장점, 사용하는 이유
◦
가독성
◦
인스턴스 생성, 상속 방지
◦
키워드 enum 사용 >> 구현 의도가 열거임을 분명히 나타냄