Skip to content

Commit

Permalink
Merge pull request #35 from HIFI-Team/dev
Browse files Browse the repository at this point in the history
🚀 feat(exception): 전역 예외 처리 추가 #23
  • Loading branch information
gengminy authored Aug 11, 2022
2 parents 21b682f + 8375542 commit f3a7195
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 106 deletions.
10 changes: 5 additions & 5 deletions src/main/java/Backend/HIFI/auth/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,22 @@ public class AuthController {
/** 로그인 요청 */
@ApiOperation(value = "로그인 요청")
@PostMapping(value = "/login")
public ResponseEntity<TokenResponseDto> 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<UserResponseDto> 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) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/Backend/HIFI/auth/AuthServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
23 changes: 0 additions & 23 deletions src/main/java/Backend/HIFI/common/CustomHttpResponse.java

This file was deleted.

43 changes: 43 additions & 0 deletions src/main/java/Backend/HIFI/common/aop/ExceptionAdvice.java
Original file line number Diff line number Diff line change
@@ -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));
}
}
36 changes: 36 additions & 0 deletions src/main/java/Backend/HIFI/common/aop/ResponseAdvice.java
Original file line number Diff line number Diff line change
@@ -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<Object> {

@Override
public boolean supports(
MethodParameter returnType,
Class<? extends HttpMessageConverter<?>> converterType)
{
return true;
}

@Override
public Object beforeBodyWrite(
Object body,
MethodParameter returnType,
MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response)
{
if (body instanceof ErrorResponse)
return ResponseUtil.onError((ErrorResponse) body);
return ResponseUtil.onSuccess(body);
}
}
12 changes: 12 additions & 0 deletions src/main/java/Backend/HIFI/common/entity/BasicResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package Backend.HIFI.common.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class BasicResponse<T> {
private boolean success;
private T response;
private ErrorResponse errorResponse;
}
33 changes: 33 additions & 0 deletions src/main/java/Backend/HIFI/common/entity/ErrorResponse.java
Original file line number Diff line number Diff line change
@@ -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<ErrorResponse> 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()
// );
// }
}
Original file line number Diff line number Diff line change
@@ -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 를 담은 에러 응답을 반환하기 위한
Expand Down
29 changes: 0 additions & 29 deletions src/main/java/Backend/HIFI/common/exception/ErrorResponse.java

This file was deleted.

This file was deleted.

13 changes: 13 additions & 0 deletions src/main/java/Backend/HIFI/common/utils/ResponseUtil.java
Original file line number Diff line number Diff line change
@@ -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 <T>BasicResponse<T> onSuccess(T response) {
return new BasicResponse<>(true, response, null);
}
public static BasicResponse<?> onError(ErrorResponse ex) {
return new BasicResponse<>(false, null, ex);
}
}

0 comments on commit f3a7195

Please sign in to comment.