[Spring Boot] 예외 처리 (exception)

2023. 4. 12. 18:26·Java/Spring Boot
728x90
728x90

#  관련 포스팅

  - 사용자 정의 예외 클래스와 에러 페이지 : https://young0105.tistory.com/227

 


@ControllerAdvice & @RestControllerAdvice

  - 예외 처리를 담당하는 클래스에 붙이는 어노테이션

  - 스프링에서 예외 처리를 담당하는 핵심적인 요소 중 하나

 

#  차이점

  - 반환 타입과 기본 응답 형태가 다름

  ▶ @ControllerAdvice

      · View를 렌더링하기 위해 ModelAndView 형태로 객체를 반환하도록 기본 설정되어 있음

          - 요청에 대한 응답이 View 형태로 전달됨 (예외 page 리턴)

          - JSP 등의 템플릿 엔진을 사용할 수 있음   

 

 ▶ @RestControllerAdvice

      · RESTfull 웹 서비스에서 사용하기 적합한 응답 처리

          - 요청에 대한 응답이 JSON 또는 XML 형태로 전달됨

 

#  예외 처리할 클래스로 지정

  - 일반적으로, 'handler'라는 패키지를 생성해서 사용함

 

1
2
3
4
5
6
// Rest API와 관련된 예외 발생 시 작동함
@RestControllerAdvice  // IoC의 대상이 됨
 
// View와 관련된 예외 발생 시 작동함
// Global 예외 처리 및 특정 패키지/컨트롤러 예외 처리
@ControllerAdvice // IoC의 대상이 됨
cs

 

 

728x90

Exception Handler

  - 스프링 MVC의 중요한 구성 요소 중 하나

  - 코드의 가독성과 유지 보수성을 향상시킬 수 있음

  - 구현 방법 : 예외를 처리할 메서드 위에 @ExceptionHandler 어노테이션 사용하기

 

#  예외를 처리하는 메서드

1
2
3
4
5
6
7
@ExceptionHandler(value = 예외종류.class) // 어떤 예외가 발생했을 때 처리할지
public ResponseEntity<?> 메서드명(예외종류 e) { // 위에서 지정한 예외 타입을 반드시 매개변수로
    
    // 코드
                                 // 500 (유형에 맞게 상태 코드 지정)
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(반환값);
}
Colored by Color Scripter
cs

 

  - 최상위 예외 클래스 : Exception

      → Exception으로 설정하면 따로 지정되지 않은 예외들은 모두 Exception의 메서드로 처리됨

           (따로 지정된 예외들은 해당 메서드로 처리됨)

 

 


#  예외에 관한 DTO를 활용한 응답 처리

▶ DTO 예시 

더보기
1
2
3
4
5
6
7
8
@Data
public class CustomError {
 
    private String parameter;
    private String field;
    private String message;
    
}
cs

 

▶ 응답 메서드 예시

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity<?> methodArgumentNotValidException(MethodArgumentNotValidException e) { 
 
    List<CustomError> errorList = new ArrayList<>();
    
    e.getAllErrors().forEach(error -> {
        // 에러가 발생한 파라미터
        String parameter = error.getCodes()[1].toString().split("\\.")[1];
        // 에러가 발생한 필드 (여기서는 유효성 검사에 걸린 제약조건)
        String field = error.getCode();
        // 에러 발생 시 메세지
        String message = error.getDefaultMessage();
        
        CustomError customError = new CustomError();
        customError.setParameter(parameter);
        customError.setField(field);
        customError.setMessage(message);
        errorList.add(customError);
    });
                                          // 400
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorList);
}
Colored by Color Scripter
cs

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

[Spring Boot] 필터 (Filter)  (0) 2023.04.12
[Spring Boot] JSP 템플릿 엔진 연결하기  (0) 2023.04.12
[Spring Boot] Validation 관련 : BindingResult 클래스  (0) 2023.04.11
[Spring Boot] Validation (유효성 검사)  (0) 2023.04.11
[Spring Boot] AOP (관점 지향 프로그래밍) ★  (0) 2023.04.11
'Java/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 필터 (Filter)
  • [Spring Boot] JSP 템플릿 엔진 연결하기
  • [Spring Boot] Validation 관련 : BindingResult 클래스
  • [Spring Boot] Validation (유효성 검사)
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    tailwindcss
    php
    vuejs
    Android
    CSS
    jQuery
    cs
    Codeigniter
    java
    C#
    SQL
    SpringBoot
    SEO
    개발일지
    Wordpress
    오블완
    면접
    git
    errorNote
    zapier
    SWAGGER
    HTML
    js
    Swing
    http
    Hotkeys
    티스토리챌린지
    typeScript
    jsp
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Spring Boot] 예외 처리 (exception)
상단으로

티스토리툴바