웹 개발을 할 때, 클라이언트가 서버로 잘못된 데이터를 전달하는 경우가 있다.
클라이언트가 일정 범위의 정수를 입력해야하는데 너무 큰 숫자를 입력하거나 잘못된 데이터를 전달하는 경우 발생하는 오류가 있다. 정수 오버플로우이다. 해결방안은 GlobalExceptionHandler를 통해서 전역적으로 예외를 처리하는 것이다.
int인 testId를 PathVariable로 받는 코드이다.
@RequiredArgsConstructor
@Controller
@RequestMapping("/test")
public class TestController {
@GetMapping("/{testId}")
public String selectTest(@PathVariable("testId") int testId, Model model, HttpServletRequest httpServletRequest)
testId를 int의 범위를 넘어서는 숫자를 입력하게 되면 int overflow가 발생하면서 에러가 난다.
이 에러의 해결방안은 GlobalExceptionHandler에서 입력값이 잘못 들어왔을 경우 다음 메서드를 통해 404.html로 포워딩해주면서 해결 가능하다.
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
// 정수 오버플로우
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public void handleMethodArgumentTypeMismatchException(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.getRequestDispatcher("404").forward(request, response);
}
GlobalExceptionHandler를 통한 정수 오버플로우 해결의 장점은 전역으로 예외 처리가 가능하다는 것이다. 코드 중복이 없이 예외를 일관되게 처리할 수 있다.
'Spring > MVC' 카테고리의 다른 글
[MVC] 웹 페이지 성능 최적화: EhCache를 활용한 데이터 캐싱 구현 (0) | 2024.05.31 |
---|---|
[MVC] @PathVariable, @RequestParam 사용법, 언제 사용하는지 (0) | 2024.05.20 |
[MVC] MVC1, MVC2 차이점 (0) | 2024.05.07 |
Dispatcher-Servlet(디스패처 서블릿) (0) | 2022.12.08 |
댓글