2023.07.14 TIL

2023. 7. 14. 17:36TIL(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