Spring/SpringMVC

[Spring MVC] 예외처리

2022. 2. 23. 15:23
목차
  1. 예외처리

예외처리

 스프링은 try-catch문 뿐만 아니라 다양한 예외처리 방법을 제공한다. 스프링에서 제공하는 다양한 예외처리 방법에 대해 알아보겠다.


1.@ExceptionHandler와 @ControllerAdvice

1-1@ExceptionHandler

 

 main메서드와 main2메서드를 살펴보면, 각각 Exception, NullPointerException이 발생할 걸 알 수 있다. 일반적인 예외처리 방식인 try-catch문을 쓰면 각 메서드에 추가적인 코드가 생기지만 @ExceptionHandler를 사용하면 위와 같이 메서드의 예외에 해당하는 예외처리 메서드로 이동하여 코드를 좀더 간결하게 만들 수 있다. 만약 하나의 메서드에서 여러개의 예외를 처리 하고 싶다면 catcher2메서드와 같이 '{}'로 예외를 묶어서 표현 할 수 있다.

 

 

1-2 @ControllerAdvice

 

 @ControllerAdvice는 하나의 클래스가 아니라 프로젝트 안의 모든 클래스에게 예외 처리 메서드를 사용할 수 있는 기능을 제공한다. 만약 특정한 패키지에만 예외 처리 메서드 적용하고 싶다면 패키지 주소를 @ControllerAdvice 메서드안에 적어주면 된다. 

 

 

위의 이미지와 같이 'NullPointerException'이 중복된다. 중복되는 경우에는 어떤 메서드를 선택해야할까? 예외 처리 메서드가 중복되면 컨트롤러 내의 예외 처리 메서드가 우선한다. 여기서는 catcher2의 메서드가 실행된다.


2.@ResponseStatus

 @ResponseStatus 어노테이션은 응답 메시지의 상태 코드를 변경할 때 사용된다. @ResponseStatus가 붙는 경우는 두 가지로 압축할 수 있다.

 

2-1 예외 처리 메서드 앞에 붙는 경우

 

 catcher2메서드가 요청처리에 성공하면 응답메시지에서는 상태 코드가 200으로 나온다. 하지만 이 메서드는 예외를 처리하는 메서드라서 정상을 나타내는 상태 코드 200이 아니라 클라이언트 혹은 서버에서 비정상으로 작동하는 응답코드 400, 혹은 500 상태 코드를 나타내줘야한다. 위와 같이 @ResponseStatus는 상태코드를 원하는 코드로 바꾸는 게 가능하다. 

 

  • 상태코드
Http reponse status code description
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
... ...
500 Internal Server Error
501 Not Implmented
503 Service Unavailable
... ...

 

2-2 예외 클래스 앞에 붙는 경우

 

 

 @ResponseStatus를 예외 클래스 앞에 붙이면 사용자가 지정하는 예외클래스가 된다. @ResponseStatus는 기본 값으로 500 상태코드 즉 서버에러 상태 코드를 갖는다. 만약 500 사용자가 500 상태코드가 아닌 클라이언트 에러인 400 Bad Request를 상태 코드로 지정하고 싶다면 @ResponseStatus 어노테이션을 추가한뒤 괄호() 원하는 에러메시지를 적어주면 된다.

 


3.<error-page> - web.xml

 web.xml에서는 상태 코드별로 뷰를 맵핑할 수 있다.

 

 위의 <error-page>를 통해 '400 상태 코드'가 나오면 뷰 '/error400.jsp'로 상태 코드가 '500'이면 뷰 '/error500.jsp'가 나온다.   

 


3.SimpleMappingExceptionResolver

상태코드 뿐만아니라 예외 종류별로 뷰 맵핑을 사용할 수 있다. servlet - context.xml에 SimpleMappingExceptionResolver를 등록한다.

 


4.스프링에서의 예외 처리 정리

  • 컨트롤러 메서드 내에서 try-catch로 처리
  • 컨트롤러에 @ExceptionHandler메서드가 처리
  • @ControllerAdvice클래스의 @ExceptionHandler메서드가 처리
  • 예외 종류별로 뷰 지정 - SimpleMappingExceptionResolver
  • 응답 상태 코드별로 뷰 지정 - <error-page>

출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)

 

'Spring > SpringMVC' 카테고리의 다른 글

[SpringMVC] rediect와 forward  (0) 2022.02.26
[SpringMVC] 요청과 응답  (0) 2022.02.25
[SpringMVC] 데이터 변환과 검증  (0) 2022.02.24
[Spring MVC] MVC 패턴  (0) 2022.02.23
[Spring MVC] 쿠키와 세션  (0) 2022.02.22
  1. 예외처리
'Spring/SpringMVC' 카테고리의 다른 글
  • [SpringMVC] 요청과 응답
  • [SpringMVC] 데이터 변환과 검증
  • [Spring MVC] MVC 패턴
  • [Spring MVC] 쿠키와 세션
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백엔드
  • 자바
  • SQL
  • Java
  • 알고리즘
  • 객체지향
  • 웹프로그래밍
  • Oracle
  • 모두의네트워크
  • It
  • 쿼리
  • 개발자
  • 코딩
  • 국비수업
  • 오라클
  • 자바의정석기초편
  • 연습문제
  • 서브쿼리
  • db
  • 네트워크
  • 자바의정석
  • 뉴렉처
  • 프로그래머스
  • 에러
  • 스프링
  • 배열
  • 백준
  • 공부
  • 오류
  • spring

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[Spring MVC] 예외처리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.