- [SpringBoot] 7. Exception Handler 처리2024년 08월 05일
- Song hyun
- 작성자
- 2024.08.05.:02
728x90반응형1. @ControllerAdvice와 @RestcontrollerAdvice
(1) 개념
(2) 차이점
2. 코드
(1) RedirectException
package com.tenco.bank.handler.Exception; import org.springframework.http.HttpStatus; import lombok.Getter; @Getter // 에러 발생 시에 여러 페이지로 이동시킬 때 사용 예정 public class RedirectException extends RuntimeException{ private HttpStatus status; // throw new RedirectException(???,???); public RedirectException(String message,HttpStatus status) { super(message); this.status=status; } }
(2) UnAuthorizedException
package com.tenco.bank.handler.Exception; import org.springframework.http.HttpStatus; import lombok.Getter; @Getter public class UnAuthorizedException extends RuntimeException{ private HttpStatus status; // throw new UnAuthorized Exception( , ) public UnAuthorizedException(String message,HttpStatus status) { super(message); this.status=status; } }
(3) GlobalControllerException
package com.tenco.bank.handler; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.tenco.bank.handler.Exception.DataDeliveryException; import com.tenco.bank.handler.Exception.RedirectException; import com.tenco.bank.handler.Exception.UnAuthorizedException; @ControllerAdvice // 해당 어노테이션을 통해 IoC의 대상이 된다. (=싱글톤 패턴으로 관리된다.) // -> HTML 렌더링 예외에 많이 사용 public class GlobalControllException { /** * (개발 시에 많이 활용) * 모든 예외 클래스를 알 수 없기 때문에 * 로깅으로 확인 할 수 있도록 설정! * * 로깅 처리에는 동기적 방식이 있다. * 동기적 방식(System.out.println) * 비동기적 방식(@slf4j) */ // @ExceptionHandler => 설정해둔 예외 발생시 해당 메서드 동작하게끔 함 @ExceptionHandler(Exception.class ) public void exception(Exception e) { System.out.println("------------------"); System.out.println(e.getClass().getName()); System.out.println(e.getMessage()); System.out.println("------------------"); } /** * Data로 예외를 내려주는 방법 * @ResponseBody 활용 * 브라우저에서 자바스크립트 코드로 동작하게 된다! * * @param e * @return */ // 예외를 내릴 때 데이터를 내리고 싶다면 1. @RestControllerAdvice를 사용하면 된다. // 단, @ControllerAdvice를 사용하고 있다면, @ResponseBody를 붙여 사용하면 된다. @ResponseBody @ExceptionHandler(DataDeliveryException.class) public String dataDeliveryException(DataDeliveryException e) { StringBuffer sb=new StringBuffer(); sb.append("<script>"); sb.append("alert('"+e.getMessage()+"')"); sb.append("window.history.back()"); sb.append("</script>"); return sb.toString(); } @ResponseBody @ExceptionHandler(UnAuthorizedException.class) public String unAuthorizedException(UnAuthorizedException e) { StringBuffer sb=new StringBuffer(); sb.append("<script>"); sb.append("alert('"+e.getMessage()+"')"); sb.append("window.history.back()"); sb.append("</script>"); return sb.toString(); } /** * 에러 페이지로 이동 처리 * JSP로 이동시 데이터를 담아서 보내는 방법 * ModelAndView,Model 사용 가능 * throw new RedirectException('페이지 없음',404); */ @ExceptionHandler(RedirectException.class) public ModelAndView redirectException(RedirectException e) { ModelAndView modelAndView=new ModelAndView("errorPage"); // 전위, 후위 연산자 사용 modelAndView.addObject("statusCode",e.getStatus().value()); modelAndView.addObject("message", e.getMessage()); return modelAndView; // 페이지 반환+데이터 내려줌 } }
(4) DataDeliveryException
package com.tenco.bank.handler.Exception; import org.springframework.http.HttpStatus; public class DataDeliveryException extends RuntimeException { private HttpStatus status; public DataDeliveryException(String message, HttpStatus status) { super(message); this.status=status; } }
728x90반응형'Springboot' 카테고리의 다른 글
[SpringBoot] 9. 어노테이션 정리 (0) 2024.08.06 [SpringBoot] 8. 에러 페이지 생성 (0) 2024.08.06 [SpringBoot] 6. 메인컨트롤러와 메인페이지 구현하기 (0) 2024.08.05 [SpringBoot] 5. 화면 구현 (0) 2024.08.05 [SpringBoot] 4. 모델링(2) - DTO 모델링 (0) 2024.08.05 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)