Controller의 예외처리

ikyeong·2023년 5월 25일
0

Spring-Study

목록 보기
8/9

01. @ExceptionHandler 와 @ControllerAdvice

📌 @ExceptionHandler

컨트롤러 내의 메서드에서 발생한 예외를 처리하는 메서드를 작성하고 @ExceptionHandler 어노테이션을 앞에 붙인다. 메서드 자체가 하나의 캐치블락이라고 생각!

@ExceptionHandler(Exception.class) 	// 만약 여러개의 예외를 처리하기 위해서는 
									//예외를 배열로 넣어주면 된다.
public String catcher(Exception ex, Model m) {
	m.addAttribute("ex",ex);
	return "error";
}

💡 jsp 페이지에 <%@page isErrorPage="true"%>를 추가해주면 모델을 이용해 예외를 전달하지 않아도 된다.


📌 @ControllerAdvice

@ExceptionHandler는 같은 컨트롤러 내부에 있는 메서드에 한해서만 예외를 처리
-> @ControllerAdvice로 전역 예외 처리 클래스를 작성할 수 있다

@ControllerAdvice("com.fastcampus.ch2") //해당 패키지에서 발생한 예외만 처리
//@ControllerAdvice //모든 패키지에 적용
public class GlobalCatcher { 
	@ExceptionHandler(Exception.class)
	public String catcher(Exception ex, Model m) {
		m.addAttribute("ex",ex);
		return "error";
	}
}

💡 예외 처리 메서드가 중복된 경우 같은 컨트롤러 내의 예외처리가 우선


02. @ResponseStatus

예외처리 메서드를 사용했을때 요청에 대한 응답코드는 200 (요청 처리 성공) -> 요청과정에서 에러가 발생했으니 응답코드도 바꿔주어야된다. 이때 사용되는것이 @ResponseStatus 어노테이션

  • 예외 처리 메서드 앞에 붙이는 경우
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) //405 Method Not Allowed.
@ExceptionHandler(Exception.class) 
public String catcher(Exception ex, Model m) {
	m.addAttribute("ex",ex);
	return "error";
}
  • 사용자 정의 예외 클래스 앞에 붙이는 경우
@ResponseStatus(HttpStatus.BAD_REQUEST) //400 Bad Reqeust.
class MyException extends RuntimeException {
	...
}

03. SimpleMappingExceptionResolver

예외 종류별 뷰 매핑에 사용

  • servlet-context.xml
<beans:bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<beans:property name="defaultErrorView" value="error"/>
    		<beans:property name="exceptionMappings">
      			<beans:props>
        			<beans:prop key="com.fastcampus.ch2.MyException">error400</beans:prop> //예외 종류에 따라 뷰를 매핑
      			</beans:props>
    		</beans:property>
		<beans:property name="statusCodes">
			<beans:props>
        			<beans:prop key="error400">400</beans:prop>
			</beans:props>
		</beans:property>
  	</beans:bean>

04. error-page

응답 상태 코드 별로 뷰를 지정

  • web.xml
<error-page>
  	<error-code>400</error-code>
    <location>/error400.jsp</location>
</error-page>
//이런식으로 여러개 설정 가능

0개의 댓글