[Spring MVC] @ExceptionHandler와 @ControllerAdcive
@ExceptionHandler
해당 어노테이션을 사용하면 특정 예외를 잡을 메서드를 정의해줄 수 있다.
코드로 살펴보자. 아래는 일반적인 컨트롤러 구성이다.
@AllArgsConstructor
@RestController
public class DemoController {
DemoService demoService;
@PostMapping("/demo")
public ResponseBase demo(@RequestBody RequestBase request) {
try {
return ResponseBase.of(demoService.update(request));
} catch (Exception e) {
return ResponseBase.of(null);
}
}
}
위의 코드를 @ExceptionHandler를 사용하면 아래와 같이 바꿔줄 수 있다.
@AllArgsConstructor
@RestController
public class DemoController {
DemoService demoService;
@PostMapping("/demo")
public ResponseBase demo(@RequestBody RequestBase request) {
return ResponseBase.of(demoService.update(request));
}
@ExceptionHandler(Exception.class)
protected ResponseBase handleException(Exception e) {
return ResponseBase.of(null);
}
}
컨트롤러에 특정 예외를 던지는 진입 메서드가 많으면 많을수록 코드량을 상당히 줄일 수 있게 된다.
@ExceptionHandler의 특징으로는
- Controller, RestController에서만 사용할 수 있다. (Service단에서는 사용 불가능)
- 리턴 타입을 자유롭게 지정해줄 수 있다.
- 해당 메서드를 정의한 컨트롤러에서만 적용된다. (타 컨트롤러에서는 적용안됨)
@ControllerAdvice
Advice는 AOP에서 사용되는 용어인데 컨트롤러를 기준으로 실행 전, 중, 후에 특정 로직을 끼워넣고싶을 때 사용한다.
@ControllerAdvice
public class DemoAdvice {
@ExceptionHandler(Exception.class)
public ResponseBase demo() {
return ResponseBase.of(null);
}
}
참고자료
[1] https://jeong-pro.tistory.com/195
'Web > Spring Web MVC' 카테고리의 다른 글
[Spring] Spring WebFlux (0) | 2020.03.03 |
---|---|
[Spring Boot] Profile 설정 (0) | 2020.02.27 |
[Spring MVC] 커맨드 객체의 값 검증하기 (Validation 체크) (0) | 2020.01.15 |
[Spring MVC] 정적 자원 매핑 - <mvc:resouces> 태그 (2) | 2019.11.27 |
[Spring MVC] ContextLoaderListener(전역 Context 설정) (0) | 2019.11.20 |
댓글
이 글 공유하기
다른 글
-
[Spring] Spring WebFlux
[Spring] Spring WebFlux
2020.03.03 -
[Spring Boot] Profile 설정
[Spring Boot] Profile 설정
2020.02.27 -
[Spring MVC] 커맨드 객체의 값 검증하기 (Validation 체크)
[Spring MVC] 커맨드 객체의 값 검증하기 (Validation 체크)
2020.01.15 -
[Spring MVC] 정적 자원 매핑 - <mvc:resouces> 태그
[Spring MVC] 정적 자원 매핑 - <mvc:resouces> 태그
2019.11.27