반응형
spring에서 exception을 처리할 수 있는 방법(4개) 출처
- the Controller-Level @ExceptionHandler
- the HandlerExceptionResolver
- @ControllerAdvice
- ResponseStatusException (Spring 5 and Above)
결국 3번 @ControllerAdvice로 현재 진행중인 시스템에 적용하여 해결하였다.
@ControllerAdvice는 Spring 3.2에서 지원합니다.
@ControllerAdvice 구현 부분
@ControllerAdvice public class GlobalExceptionController { @ExceptionHandler(CustomGenericException.class) public ModelAndView handleCustomException(CustomGenericException ex) { ModelAndView model = new ModelAndView("/common/error/error"); model.addObject("errCode", ex.getErrCode()); model.addObject("errMsg", ex.getErrMsg()); return model; } @ExceptionHandler(Exception.class) public ModelAndView handleAllException(Exception ex) { ModelAndView model = new ModelAndView("/common/error/error"); return model; } }
controller 전역에서 CustomGenericException이 발생하면 handlerCustomException 메서드로 들어온다.
CustomGenericException 구현 부분 Model 역할을 한다
public class CustomGenericException extends RuntimeException { private static final long serialVersionUID = 1L; private int errCode; private String errMsg; public int getErrCode() { return errCode; } public void setErrCode(int errCode) { this.errCode = errCode; } public String getErrMsg() { return errMsg; } public void setErrMsg(String errMsg) { this.errMsg = errMsg; } public CustomGenericException(int errCode, String errMsg) { this.errCode = errCode; this.errMsg = errMsg; } public CustomGenericException(CustomError e) { this.errCode = e.getCode(); this.errMsg = e.getMessage(); } }
에러 정의
public enum CustomError { ERR_USER_LIST_NO_AUTHORITY ( 0x1, "회원 리스트 접근 권한이 없음!" ), ERR_USER_REGIST_NO_AUTHORITY ( 0x2, "회원 등록 접근 권한이 없음!" ); private Integer code; private String message; CustomError( Integer code, String message ) { this.code = code; this.message = message; } public Integer getCode() { return code; } public String getMessage() { return message; } }
자신이 커스텀으로 만들고 싶은 error는 CustomError에 추가로 선언 한다.
에러 발생시키는 부분 > 비즈니스 로직 Controller
@Controller public class UserController { @RequestMapping( value = "/userRegistForm" ) public String userRegistForm( HttpSession session, Model model ) throws Exception { UserVo userVo = ( UserVo ) session.getAttribute( CommonUtil.LOGIN_SESSION_NAME ); if ( "generalUser".equals( userVo.getUsrRt() ) ) { // 권한 확인 // 해당 권한의 경우 회원 등록 권한이 없음! CustomException 발생 throw new CustomGenericException(CustomError.ERR_USER_REGIST_NO_AUTHORITY); } return "/user/userRegistForm"; } }
throw new CustomGenericException(CustomError.ERR_USER_REGIST_NO_AUTHORITY); 을 통해 커스텀 Exception error를 발생시킨다.
- 파일 구조
반응형
LIST
'개발 > Spring Framework' 카테고리의 다른 글
Spring MVC vs. Spring Boot: 어떤 것을 선택해야 할까? (0) | 2023.09.15 |
---|