[Spring] ControllerAdvice
2024. 7. 6. 23:01ㆍBE/Spring
1. ControllerAdvice
예외 발생 시 매번 try-catch
를 해도 되지만 귀찮다.
@ControllerAdvice
은 비즈니스 로직과 예외 처리를 완전히 분리시켜줌과 동시에 원하는 곳에 원하는 방식으로 예외를 처리할 수 있게 해 준다.
<!-- web.xml -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<!-- DispatcherServlet이 해당 mapping을 찾지 못할 경우 NoHandlerFoundException를 throw하게 설정 -->
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
spring 6.1 버전부터는 throwExceptionIfNoHandlerFound
의 default 값은 true
라서 별도로 설정하지 않아도 된다.
package com.company.board.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;
@ControllerAdvice
public class ExceptionControllerAdvice {
private final Logger logger = LoggerFactory.getLogger(ExceptionControllerAdvice.class);
@ExceptionHandler(Exception.class)
public String handleException(Exception ex, Model model) {
logger.error("Exception 발생 : {}", ex.getMessage());
model.addAttribute("msg", "처리중 에러 발생!!!");
return "error/error";
}
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex, Model model) {
logger.error("404 발생 : {}", "404 page not found");
model.addAttribute("msg", "해당 페이지를 찾을 수 없습니다!!!");
return "error/error";
}
// 더 많은 예외처리도 추가할 수 있다.
}
@ControllerAdvice
: 이 방법은 controller만 지원하므로 sevice와 dao에서 발생한 예외는 controller로 throw 해야 한다.
이제는 모든 예외를 한 곳에서 처리할 수 있다!
- 2024.07.24 추가
RestController + ControllerAdvice = RestControllerAdvice
예외가 발생했을때 json으로 응답하고 싶은 경우 사용할 것.
'BE > Spring' 카테고리의 다른 글
[Spring] Connection Pool (0) | 2024.07.06 |
---|---|
[Spring] File Upload & Download (0) | 2024.07.06 |
[Spring] Java Config (0) | 2024.07.06 |
[Spring] AOP (0) | 2024.07.06 |
[Spring] Interceptor (0) | 2024.07.06 |