IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육 과정]23307.04_2 10장 예외처리

연지양갱 2023. 7. 4. 15:35
728x90
반응형
SMALL

10장

https://thebook.io/080266/0346/

 

스프링 코딩 공작소: 10.1.2 예외 처리 방법의 종류

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 


예외 처리 방법의 종류

 

애너테이션 설명
@ResponseStatus 예외 처리를 위한 가장 간단한 방법으로, 발생한 예외를 HTTP 상태 코드로 매핑시켜 응답하는 애너테이션입니다.
@ExceptionHandler 컨트롤러 안에 요청 처리 메서드에서 발생하는 오류나 예외를 직접 구체화하여 예외 처리를 위한 메서드에 선언하는 애너테이션입니다.
@ControllerAdvice 여러 컨트롤러에서 발생하는 오류의 공통점을 묶어 예외 처리를 위한 클래스에 선언하는 애너테이션입니다.

 

 

HTTP 상태 코드

서버가 정상적으로 처리되었거나 오류가 발생했는지의 여부를 알려주는 상태 코드

 

응답 상태 코드 설명
400 BAD_REQUEST 일반적인 요청 실패에 사용합니다.
401 UNAUTHORIZED 클라이언트 인증에 문제가 있을 때 사용합니다.
403 FORBIDDEN 인증 상태에 상관없이 액세스를 금지할 때 사용합니다.
404 NOT_FOUND 요청 URI에 해당하는 리소스가 없을 때 사용합니다.
405 METHOD_NOT_ALLOWED HTTP 메서드가 지원되지 않을 때 사용합니다.
406 NOT_ACCEPTABLE 요청된 리소스 미디어 타입을 제공하지 못할 때 사용합니다.
409 CONFLICT 리소스 상태에 위반되는 행위를 했을 때 사용합니다.
412 PRECONDITION_FAILED 조건부 연산을 지원할 때 사용합니다.
415 UNSUPPORTED_MEDIA_TYPE 요청 페이로드에 있는 미디어 타입이 처리되지 못했을 때 사용합니다.
500 INTERNAL_SERVER_ERROR API가 잘못 작동할 때 사용합니다.

 

 

@ResponseStatus를 이용한 예외 처리

HTTP 상태코드를 웹 브라우저에 전달

 

ResponseStatusExceptionResolver 클래스가 제공

 

// 예외 메서드에 사용할 때
@ResponseStatus(value=HttpStatus.상태 코드, reason="오류 설명")
@RequestMapping(...)
public String 메서드 이름() {
    ...
}
// 예외 클래스에 사용할 때
@ResponseStatus(value=HttpStatus.상태 코드, reason="오류 설명")
public class 클래스 이름 extends RuntimeException {
    ...
}

@ResponseStatus에서 사용하는 속성

요소 타입 설명
code HttpStatus 응답에 사용되는 상태 코드입니다.
reason String 응답에 사용되는 이유를 설명합니다.
value HttpStatus 코드에 대한 별칭입니다.

reason 속성으로 자세한 설명을 설정할 수 있음

 

 

예시

package com.springmvc.chap10;
...
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@Controller
public class Example01Controller {
    @ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="요청 실패했습니다.")
    @GetMapping("/exam01")
    public String requestMethod(Model model) {
        System.out.println("chapter10_01 예제입니다");
        model.addAttribute("data", "@ResponseStatus 처리 예제입니다");
        return "webpage10_01";
    }
}

 

 

 

@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="요청 실패했습니다")

 

실습

실습

 

 

 

ExceptionHanndler

@ExceptionHandler(value={예외 클래스1.class[,예외 클래스2.class,...]})
public String 메서드 이름() {
    ...
}
@ExceptionHandler
public String 메서드 이름(예외 클래스 exp) {
    ...
}
요소 타입 설명
value Class<? extends Throwable>[] @ExceptionHandler가 선언된 메서드가 처리할 예외 클래스입니다.

 

value속성이나 {} 생략 가능

@ResponseStatus없이 발생한 예외를 처리할 수 있음

 

 

 

 

 

@ControllerAdvice

컨트롤러의 요청 처리 메소드에서 예외가 발생할 경우 -> @ControllerAdvice

 

@ControllerAdvice(basePackages={"기본 패키지 이름, ...})
public class 클래스 이름 {
    ...
}

 

요소 타입 설명
annotations Class<? extends Annotation>[] 애너테이션의 배열입니다.
assignableTypes Class<?>[] 클래스의 배열입니다.
basePackageClasses Class<?>[] @ControllerAdvice가 적용된 클래스가 지원할 컨트롤러를 선택할 수 있는 패키지를 지정합니다.
basePackages String[] 기본 패키지의 배열입니다.
value String[] basePackages 속성의 별칭입니다.

@ExceptionHandler, @ModelAttribute, @InitBinder가 선언된 메서드를 사용 가능

반응형