예외처리 실습먼저
@Controller
public class ExceptionController {
@RequestMapping("/ex")
public void main() throws Exception {
throw new Exception("예외가 발생했습니다.");
}
}
→ 예외처리 안하면 톰캣에서 500에러로 처리한다
package com.fastcampus.ch2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ExceptionController {
@ExceptionHandler(Exception.class)
public String catcher(Exception ex) {
// 예외처리 하는 별도의 메소드
return "error";
}
@RequestMapping("/ex")
public String main() throws Exception {
throw new Exception("예외가 발생했습니다.");
}
@RequestMapping("/ex2")
public String main2() throws Exception {
throw new Exception("예외가 발생했습니다.");
}
}
→ catcher메소드가 try - catch 역할을 한다
@ExceptionHandler({NullPointerException.class, FileNotFoundException.class}) → 배열식으로도 사용 가능
@Controller내에서만 사용 가능하다
package com.fastcampus.ch2;
import java.io.FileNotFoundException;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalCatcher {
@ExceptionHandler({NullPointerException.class, FileNotFoundException.class})
public String catcher2(Exception ex, Model m) {
// 예외처리 하는 별도의 메소드
m.addAttribute("ex" , ex);
return "error";
}
@ExceptionHandler(Exception.class)
public String catcher(Exception ex, Model m) {
// 예외처리 하는 별도의 메소드
// NullPointerException을 제외한 에러는 전부 여기서 처리
m.addAttribute("ex" , ex);
return "error";
}
}
→ 이렇게 하면 모든 컨트롤러 내에서 예외처리 가능..
컨트롤러 내에 에러처리 메소드, 글로벌 에러처리 클래스가 같이 존재하면 가까운쪽에서 처리
글로벌 에러처리에 경로도 설정 가능