본문 바로가기
java/spring

spring - error(1)

by rewind 2024. 7. 6.

예외처리 실습먼저

@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";
	}

}

 이렇게 하면 모든 컨트롤러 내에서 예외처리 가능..

 

컨트롤러 내에 에러처리 메소드, 글로벌 에러처리 클래스가 같이 존재하면 가까운쪽에서 처리

글로벌 에러처리에 경로도 설정 가능