2023.07.14 TIL
2023. 7. 14. 17:36ㆍTIL(Today I Learned)
(1) 예외를 처리하는 법 -> ControllerAdvice
package com.kh.app.handler.exception;
import org.apache.ibatis.javassist.NotFoundException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import com.kh.app.exception.LoginFailException;
@ControllerAdvice(annotations = Controller.class)
public class ErrorHandler {
@ExceptionHandler(Exception.class)
public String handle() {
return "error/errorPage";
}
@ExceptionHandler(LoginFailException.class)
public String handlerLoginFail() {
return "error/loginFail";
}
@ExceptionHandler(NotFoundException.class)
public String handleNotFound() {
return "error/404page";
}
}
- 이렇게 만들어서 쓴다.
(2) Interceptor
- preHandle, postHandle, afterComplete 이렇게 세개 시점에 대해서 간섭을 할 수 있는 것이 바로 인터셉터다.
- 인터셉터로 요청을 확인하는 용도로 사용할 수 있다.
- Interceptor를 사용할때, HandlerInterceptor를 상속받아 사용한다. 그런데 HandlerInterceptor를 구현받을 때, override하지 않아도 빨간 줄이 뜨지 않는 이유는 무엇일까?
- 그 이유는 default 덕분에 빨간줄이 생기지 않는다. interface의 특징 때문에 하위호환이 안되는 것을 방지하기 위해서 default가 추가되었다.
package com.kh.app.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class KhInterceptor implements HandlerInterceptor {
//컨트롤러 넘어가기 전
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info(request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
- servlet-context에 이걸 추가한다.
<!-- 인터셉터 맵핑 -->
<interceptors>
<interceptor>
<mapping path=""/>
<beans:bean class="com.kh.app.interceptor.KhInterceptor"></beans:bean>
</interceptor>
</interceptors>
'TIL(Today I Learned)' 카테고리의 다른 글
2023.07.18 TIL (0) | 2023.07.18 |
---|---|
2023.07.17 TIL (0) | 2023.07.17 |
2023.07.13 TIL (0) | 2023.07.13 |
2023.07.12 TIL (0) | 2023.07.12 |
2023.07.07 TIL (0) | 2023.07.07 |