diff --git a/src/main/java/Backend/HIFI/auth/AuthController.java b/src/main/java/Backend/HIFI/auth/AuthController.java index beac3d8..731833e 100644 --- a/src/main/java/Backend/HIFI/auth/AuthController.java +++ b/src/main/java/Backend/HIFI/auth/AuthController.java @@ -32,22 +32,22 @@ public class AuthController { /** 로그인 요청 */ @ApiOperation(value = "로그인 요청") @PostMapping(value = "/login") - public ResponseEntity postLoginForm(@RequestBody UserRequestDto userRequestDto) { + public TokenResponseDto postLoginForm(@RequestBody UserRequestDto userRequestDto) { final TokenResponseDto tokenResponseDto = authService.login(userRequestDto); log.info("api = 로그인 요청, req = {}", userRequestDto); - return ResponseEntity.ok(tokenResponseDto); + return tokenResponseDto; } /** 회원가입을 요청 */ @ApiOperation(value = "회원가입 요청") @PostMapping(value = "/join") - public ResponseEntity postJoin(@RequestBody UserRequestDto userRequestDto) { + public UserResponseDto postJoin(@RequestBody UserRequestDto userRequestDto) { final UserResponseDto userResponseDto = authService.join(userRequestDto); log.info("api = 회원가입 요청, req = {}", userRequestDto); - return ResponseEntity.ok(userResponseDto); + return userResponseDto; } - /** 유저를 로그아운 시킵니다, 엑세스 토큰 쿠키 삭제 */ + /** 유저를 로그아웃 시킵니다 */ @ApiOperation(value = "로그아웃 요청") @PostMapping("/logout") public String postLogout(HttpServletResponse response) { diff --git a/src/main/java/Backend/HIFI/auth/AuthServiceImpl.java b/src/main/java/Backend/HIFI/auth/AuthServiceImpl.java index fef61f1..b058c76 100644 --- a/src/main/java/Backend/HIFI/auth/AuthServiceImpl.java +++ b/src/main/java/Backend/HIFI/auth/AuthServiceImpl.java @@ -39,7 +39,7 @@ public class AuthServiceImpl implements AuthService{ @Transactional public UserResponseDto join(UserRequestDto userRequestDto) { if (userRepository.existsByEmail(userRequestDto.getEmail())) { - throw new RuntimeException("이미 가입된 유저입니다"); + throw new BadRequestException("이미 가입된 유저입니다"); } User user = userRequestDto.toUser(passwordEncoder); diff --git a/src/main/java/Backend/HIFI/common/CustomHttpResponse.java b/src/main/java/Backend/HIFI/common/CustomHttpResponse.java deleted file mode 100644 index fabfeaf..0000000 --- a/src/main/java/Backend/HIFI/common/CustomHttpResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package Backend.HIFI.common; - -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@EqualsAndHashCode -@NoArgsConstructor -@AllArgsConstructor -public class CustomHttpResponse { - String Message; - T data; - - public static CustomHttpResponse onSuccess(T data) { - return new CustomHttpResponse<>(null, data); - } - - public static CustomHttpResponse onFailure(String message) { - return new CustomHttpResponse(message, null); - } -} diff --git a/src/main/java/Backend/HIFI/common/aop/ExceptionAdvice.java b/src/main/java/Backend/HIFI/common/aop/ExceptionAdvice.java new file mode 100644 index 0000000..0e6fe76 --- /dev/null +++ b/src/main/java/Backend/HIFI/common/aop/ExceptionAdvice.java @@ -0,0 +1,43 @@ +package Backend.HIFI.common.aop; + +import Backend.HIFI.common.entity.ErrorResponse; +import Backend.HIFI.common.exception.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@Slf4j +@RestControllerAdvice +public class ExceptionAdvice { + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + protected ErrorResponse handleBadRequestException(BadRequestException e) { + log.error("BadRequestException : {}", e); + return new ErrorResponse(e); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.UNAUTHORIZED) + protected ErrorResponse handleUnauthorizedException(UnauthorizedException e) { + log.error("UnauthorizedException : {}", e); + return new ErrorResponse(e); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.NOT_FOUND) + protected ErrorResponse handleNotFoundExceptionException(NotFoundException e) { + log.error("NotFoundException : {}", e); + return new ErrorResponse(e); + } + + @ExceptionHandler + protected ErrorResponse handleAllException(Exception e) { + log.error("Exception : {}", e); + return new ErrorResponse(BaseException.toBaseException(e)); + } +} \ No newline at end of file diff --git a/src/main/java/Backend/HIFI/common/aop/ResponseAdvice.java b/src/main/java/Backend/HIFI/common/aop/ResponseAdvice.java new file mode 100644 index 0000000..d824575 --- /dev/null +++ b/src/main/java/Backend/HIFI/common/aop/ResponseAdvice.java @@ -0,0 +1,36 @@ +package Backend.HIFI.common.aop; + +import Backend.HIFI.common.entity.ErrorResponse; +import Backend.HIFI.common.utils.ResponseUtil; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +@RestControllerAdvice +public class ResponseAdvice implements ResponseBodyAdvice { + + @Override + public boolean supports( + MethodParameter returnType, + Class> converterType) + { + return true; + } + + @Override + public Object beforeBodyWrite( + Object body, + MethodParameter returnType, + MediaType selectedContentType, + Class> selectedConverterType, + ServerHttpRequest request, ServerHttpResponse response) + { + if (body instanceof ErrorResponse) + return ResponseUtil.onError((ErrorResponse) body); + return ResponseUtil.onSuccess(body); + } +} diff --git a/src/main/java/Backend/HIFI/common/entity/BasicResponse.java b/src/main/java/Backend/HIFI/common/entity/BasicResponse.java new file mode 100644 index 0000000..4c41c11 --- /dev/null +++ b/src/main/java/Backend/HIFI/common/entity/BasicResponse.java @@ -0,0 +1,12 @@ +package Backend.HIFI.common.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class BasicResponse { + private boolean success; + private T response; + private ErrorResponse errorResponse; +} diff --git a/src/main/java/Backend/HIFI/common/entity/ErrorResponse.java b/src/main/java/Backend/HIFI/common/entity/ErrorResponse.java new file mode 100644 index 0000000..41f2faf --- /dev/null +++ b/src/main/java/Backend/HIFI/common/entity/ErrorResponse.java @@ -0,0 +1,33 @@ +package Backend.HIFI.common.entity; + +import Backend.HIFI.common.exception.BaseException; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class ErrorResponse { + private final LocalDateTime timestamp = LocalDateTime.now(); + private final int status; + private final String error; +// private final String code; + private final String message; + + public ErrorResponse(BaseException e) { + this.status = e.getHttpStatusCode().value(); + this.error = e.getHttpStatusCode().name(); + this.message = e.getMessage(); + } + +// public static ResponseEntity toResponseEntity(BaseException e) { +// return ResponseEntity +// .status(e.getHttpStatusCode()) +// .body(ErrorResponse.builder() +// .status(e.getHttpStatusCode().value()) +// .error(e.getHttpStatusCode().name()) +//// .code(errorCode.name()) +// .message(e.getMessage()) +// .build() +// ); +// } +} \ No newline at end of file diff --git a/src/main/java/Backend/HIFI/common/exception/BaseException.java b/src/main/java/Backend/HIFI/common/exception/BaseException.java index 9f92eb1..57c4f54 100644 --- a/src/main/java/Backend/HIFI/common/exception/BaseException.java +++ b/src/main/java/Backend/HIFI/common/exception/BaseException.java @@ -1,9 +1,7 @@ package Backend.HIFI.common.exception; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; /** Http Status 를 담은 에러 응답을 반환하기 위한 diff --git a/src/main/java/Backend/HIFI/common/exception/ErrorResponse.java b/src/main/java/Backend/HIFI/common/exception/ErrorResponse.java deleted file mode 100644 index bd538eb..0000000 --- a/src/main/java/Backend/HIFI/common/exception/ErrorResponse.java +++ /dev/null @@ -1,29 +0,0 @@ -package Backend.HIFI.common.exception; - -import lombok.Builder; -import lombok.Getter; -import org.springframework.http.ResponseEntity; - -import java.time.LocalDateTime; - -@Getter -@Builder -public class ErrorResponse { - private final LocalDateTime timestamp = LocalDateTime.now(); - private final int status; - private final String error; -// private final String code; - private final String message; - - public static ResponseEntity toResponseEntity(BaseException e) { - return ResponseEntity - .status(e.getHttpStatusCode()) - .body(ErrorResponse.builder() - .status(e.getHttpStatusCode().value()) - .error(e.getHttpStatusCode().name()) -// .code(errorCode.name()) - .message(e.getMessage()) - .build() - ); - } -} \ No newline at end of file diff --git a/src/main/java/Backend/HIFI/common/exception/GlobalExceptionHandler.java b/src/main/java/Backend/HIFI/common/exception/GlobalExceptionHandler.java deleted file mode 100644 index 29de280..0000000 --- a/src/main/java/Backend/HIFI/common/exception/GlobalExceptionHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package Backend.HIFI.common.exception; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import javax.validation.ConstraintViolationException; - -import static Backend.HIFI.common.exception.ErrorCode.DUPLICATE_RESOURCE; - -@Slf4j -@RestControllerAdvice -public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - - @ExceptionHandler(BadRequestException.class) - protected ResponseEntity handleBadRequestException(BadRequestException e) { - log.error("BadRequestException : {}", e); - return ErrorResponse.toResponseEntity(e); - } - - @ExceptionHandler(UnauthorizedException.class) - protected ResponseEntity handleUnauthorizedException(UnauthorizedException e) { - log.error("UnauthorizedException : {}", e); - return ErrorResponse.toResponseEntity(e); - } - - @ExceptionHandler(InternalServerException.class) - protected ResponseEntity handleInternalServerException(InternalServerException e) { - log.error("InternalServerException : {}", e); - return ErrorResponse.toResponseEntity(e); - } - @ExceptionHandler(NotFoundException.class) - protected ResponseEntity handleNotFoundExceptionException(NotFoundException e) { - log.error("NotFoundException : {}", e); - return ErrorResponse.toResponseEntity(e); - } - - @ExceptionHandler(Exception.class) - protected ResponseEntity handleAllException(Exception e) { - log.error("Exception : {}", e); - return ErrorResponse.toResponseEntity(BaseException.toBaseException(e)); - } -} \ No newline at end of file diff --git a/src/main/java/Backend/HIFI/common/utils/ResponseUtil.java b/src/main/java/Backend/HIFI/common/utils/ResponseUtil.java new file mode 100644 index 0000000..6baf976 --- /dev/null +++ b/src/main/java/Backend/HIFI/common/utils/ResponseUtil.java @@ -0,0 +1,13 @@ +package Backend.HIFI.common.utils; + +import Backend.HIFI.common.entity.ErrorResponse; +import Backend.HIFI.common.entity.BasicResponse; + +public class ResponseUtil { + public static BasicResponse onSuccess(T response) { + return new BasicResponse<>(true, response, null); + } + public static BasicResponse onError(ErrorResponse ex) { + return new BasicResponse<>(false, null, ex); + } +}