Exception Handling

์ปจํŠธ๋กค๋Ÿฌ ๋‚ด์—์„œ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

@ExceptionHandler ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ๋‹ค. ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น handler๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.


import org.springframework.beans.TypeMismatchException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class HelloController {

		... ์ค‘๋žต

    @ExceptionHandler(TypeMismatchException.class)
    public String handleTypeMismatchException() {
        return "์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํŽ˜์ด์ง€";
    }

}

๊ณตํ†ต ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€์—์„œ๊ฐ€ ์•„๋‹Œ ํŠน์ • ํŒจํ‚ค์ง€ ๋“ฑ์„ ๋Œ€์ƒ์œผ๋กœ ๊ณตํ†ต์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด @ControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ๋‹ค.

package com.example;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice("example")
public class CommonExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    public String handleRuntimeException() {
        return "์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํŽ˜์ด์ง€";
    }

}

์œ„์˜ ์˜ˆ์‹œ๋Š” ํŠน์ • ํŒจํ‚ค์ง€์ธ example ๋ฐ ํ•˜์œ„ ํŒจํ‚ค์ง€์— ํ•ด๋‹น ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

ํŒจํ‚ค์ง€ ์ด์™ธ์—๋„ @ControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€์ƒ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํŠน์ • ํŒจํ‚ค์ง€ ๋ฐ ํ•˜์œ„ ํŒจํ‚ค์ง€ ๋‚ด์˜ ์ปจํŠธ๋กค๋Ÿฌ

    @ControllerAdvice(String[])
  2. ํŠน์ • ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋œ ์ปจํŠธ๋กค๋Ÿฌ

    @ControllerAdvice(Class<? extends Annotation>[])
  3. ํŠน์ • ํƒ€์ž… ๋˜๋Š” ํ•˜์œ„ ํƒ€์ž…์˜ ์ปจํŠธ๋กค๋Ÿฌ

    @ControllerAdvice(Class<?>[])

์ ์šฉ ์šฐ์„  ์ˆœ์œ„

์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€์— @ExceptionHandler ๋ฉ”์„œ๋“œ ์ค‘ ํ•ด๋‹น Exception์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํƒ์ƒ‰ํ•œ๋‹ค.

์—†๋‹ค๋ฉด @ControllerAdvice ๋‚ด์—์„œ ํƒ์ƒ‰ํ•œ๋‹ค.

์ฆ‰, @ExceptionHandler โ†’ @ControllerAdvice ์ˆœ์„œ์ด๋‹ค.

Last updated