예외처리

임정호·2022년 1월 22일
0

Spring공부

목록 보기
7/10

try-catch

public String main1() throws Exception{
	try {
		throw new Exception("예외가 발생했습니다.")
	}
	catch(Exception e) {
		return "error";
        }
}

@ExceptionHandler

@ExceptionHandler(Exception.class)
public String catcher(Exception ex,Model m) {
	m.addAttribute("ex",ex);
	return "error";
}

@ControllerAdvice

예외처리를 하는 클래스를 생성한 후,
ControllerAdvice annotation을 선언하여 전역으로 관리할 수 있다.

@ControllerAdvice("패키지명")		//지정된 패키지에서 발생한 예외만 처리
//@ControllerAdvice		//모든 패키지에 적용
public class GlobalCatcher {

	@ExceptionHandler(Exception.class)
	public String catcher(Exception ex,Model m) {
		m.addAttribute("ex",ex);
		return "error";
	}
	@ExceptionHandler({NullPointerException.class,FileNotFoundException.class})
	public String catcher2(Exception ex,Model m) {
		m.addAttribute("ex",ex);
		return "error";
		
	}
}

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

응답 상태 코드별로 뷰 지정

서버가 매끄럽게 예외를 처리해도 결국 사용자가 원하는 요청을 수행하지 못 한 상황이다. 하지만 서버는 서버에서 처리한 대로 응답했기 때문에 200으로 응답한다.

서버는 default로 500을 뿜는데, ResponseStatus annotation을 사용하면, 원하는 응답 상태로 변경할 수 있다.

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)   // 200 -> 500으로
public String catcher(Exception ex,Model m) {
	m.addAttribute("ex",ex);
	return "error";
}

web.xml에 아래와 같은 코드를 추가하여, 응답 상태별로 보여줄 jsp와 자동으로 연결할 수 있다.

	<error-page>
		<error-code>400</error-code>
			<location>/error400.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
			<location>/error500.jsp</location>
	</error-page>

0개의 댓글