π λͺ©μ°¨
@Controller
, @RestController
κ° μ μ©λ Beanμμ λ°μλ μμΈλ₯Ό μ‘μμ νλμ λ©μλμμ μ²λ¦¬ν΄μ£Όλ κΈ°λ₯μ
λλ€.
(@Serviceλ @Repository λ± λ€λ₯Έ Beanμμλ μ¬μ©ν μ μμ΅λλ€.)
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
Class<? extends Throwable>[] value() default {};
}
value μ€μ μ ν΅ν΄μ μ΄λ€ μμΈλ₯Ό μ²λ¦¬ν μ§ μ€μ ν μ μμ΅λλ€. (μ£Όμμ¬νμ valueλ₯Ό μ§μ νμ§ μμΌλ©΄ λͺ¨λ μμΈλ₯Ό μ²λ¦¬νκΈ° λλ¬Έμ μ€μ μ ν΄μ£Όμ΄μΌ ν©λλ€!)
@ExceptionHandler({Exception.class, RuntimeException.class})
μ κ°μ΄ 2κ° μ΄μλ λ±λ‘ κ°λ₯ν©λλ€.
νμ§λ§ μ΄λ₯Ό @Controller
λ¨μ μ μνκ² λλ€λ©΄, λ€λ₯Έ Controllerμ μμΈλ μ²λ¦¬ν μ μμΌλ―λ‘ κ°κ°μ Controllerμ μ μν΄μ€μΌ ν©λλ€.
κ·Έλ κ² λλ©΄ κ°μ μμΈμ²λ¦¬μμλ λΆκ΅¬νκ³ κ°κ°μ Controllerμ μ μν΄μ€μΌ νλ μ½λμ μ€λ³΅μ΄ λ°μνκ² λ©λλ€.
μ΄λ₯Ό νλ²μ μ²λ¦¬ν μ μκ² ν΄μ£Όλ κ²μ΄ @ControllerAdvice
μ
λλ€.
@Controller
μ λ
Έν
μ΄μ
μ΄ μλ λͺ¨λ κ³³μμμ μμΈλ₯Ό μ‘μ μ μλλ‘ ν΄μ€λλ€.
@ControllerAdvice
μμ μλ @ExceptionHandler
λ λͺ¨λ 컨νΈλ‘€λ¬μμ λ°μνλ μμΈμν©μ μ‘μ μ μμ΅λλ€.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
Class<?>[] assignableTypes() default {};
Class<? extends Annotation>[] annotations() default {};
}
μμ± μ€μ μ ν΅ν΄μ μνλ 컨νΈλ‘€λ¬λ ν¨ν€μ§λ§ μ ν ν μ μκ³ , μ ννμ§ μλλ€λ©΄ λͺ¨λ ν¨ν€μ§μ μλ 컨νΈλ‘€λ¬λ₯Ό λ΄λΉνκ² λ©λλ€.