
package shop.mtcoding.blog._core.errors;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import shop.mtcoding.blog._core.errors.exception.*;
// RuntimeException이 터지면 해당 파일로 오류가 모인다
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(Exception400.class)
public String ex400(Exception400 e, HttpServletRequest request){
request.setAttribute("msg", e.getMessage());
return "err/400";
}
@ExceptionHandler(Exception401.class)
public String ex401(Exception401 e, HttpServletRequest request){
request.setAttribute("msg", e.getMessage());
return "err/401";
}
@ExceptionHandler(Exception403.class)
public String ex403(RuntimeException e, HttpServletRequest request){
request.setAttribute("msg", e.getMessage());
return "err/403";
}
@ExceptionHandler(Exception404.class)
public String ex404(RuntimeException e, HttpServletRequest request){
request.setAttribute("msg", e.getMessage());
return "err/404";
}
@ExceptionHandler(Exception500.class)
public String ex500(RuntimeException e, HttpServletRequest request){
request.setAttribute("msg", e.getMessage());
return "err/500";
}
}
이게 전부 뷰를 리턴하니까, 제이슨을 리턴하도록 바꿔줄거임
이렇게 바꿈
package shop.mtcoding.blog._core.errors;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import shop.mtcoding.blog._core.errors.exception.*;
import shop.mtcoding.blog._core.utils.ApiUtil;
// RuntimeException이 터지면 해당 파일로 오류가 모인다
@RestController // 데이터를 응답받음
public class MyExceptionHandler {
@ExceptionHandler(Exception400.class)
public ResponseEntity<?> ex400(Exception400 e){
// http body -> 구성한 객체
ApiUtil<?> apiUtil = new ApiUtil<>(400, e.getMessage());
return new ResponseEntity<>(apiUtil, HttpStatus.BAD_REQUEST); // http header, http body
}
@ExceptionHandler(Exception401.class)
public ResponseEntity<?> ex401(Exception401 e){
ApiUtil<?> apiUtil = new ApiUtil<>(401, e.getMessage());
return new ResponseEntity<>(apiUtil, HttpStatus.UNAUTHORIZED);
}
@ExceptionHandler(Exception403.class)
public ResponseEntity<?> ex403(RuntimeException e){
ApiUtil<?> apiUtil = new ApiUtil<>(403, e.getMessage());
return new ResponseEntity<>(apiUtil, HttpStatus.FORBIDDEN);
}
@ExceptionHandler(Exception404.class)
public ResponseEntity<?> ex404(RuntimeException e){
ApiUtil<?> apiUtil = new ApiUtil<>(404, e.getMessage());
return new ResponseEntity<>(apiUtil, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception500.class)
public ResponseEntity<?> ex500(RuntimeException e){
ApiUtil<?> apiUtil = new ApiUtil<>(500, e.getMessage());
return new ResponseEntity<>(apiUtil, HttpStatus.INTERNAL_SERVER_ERROR);
}
}