티스토리 뷰
10.2.3 @ResponseStatus를 이용하여 예외 처리하기
CategoryException.java
package com.springmvc.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@SuppressWarnings("serial")
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason="요청한 도서 분야를 찾을 수 없습니다.")
public class CategoryException extends RuntimeException {
}
BookController.java
@GetMapping("/{category}")
public String requestBooksByCategory(@PathVariable("category") String bookCategory, Model model) {
List<Book> booksByCategory = bookService.getBookListByCategory(bookCategory);
if(booksByCategory == null || booksByCategory.isEmpty()) {
throw new CategoryException();
}
model.addAttribute("bookList",booksByCategory);
return "books";
}
10.3.2 @ExceptionHandler를 이용하여 예외 처리하기
BookIdException.java
package com.springmvc.exception;
@SuppressWarnings("serial")
public class BookIdException extends RuntimeException{
private String bookId;
public String getBookId() {
return bookId;
}
public BookIdException(String bookId) {
this.bookId = bookId;
}
}
BookRepositoryImpl.java
if(bookInfo == null) {
throw new BookIdException(bookId);
}
return bookInfo;
}
BookController.java
// p.273
@ExceptionHandler(value= {BookIdException.class})
public ModelAndView handleError(HttpServletRequest req, BookIdException exception) {
ModelAndView mav = new ModelAndView();
mav.addObject("invalidBookId", exception.getBookId());
mav.addObject("exception", exception);
mav.addObject("url", req.getRequestURL() + "?" + req.getQueryString());
mav.setViewName("errorBook");
return mav;
}
errorBook.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>예외 처리</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="../home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h2 class="alert alert-danger">해당 도서가 존재하지 않습니다.<br>
도서ID : ${invalidBookId}
</h2>
</div>
</div>
<div class="container">
<p>${url}</p>
<p>${exception}</p>
</div>
<div class="container">
<p>
<a href="<c:url value='/books'/>" class="btn btn-secondary">도서목록 »</a>
</p>
</div>
</body>
</html>
10.4.2 @ControllerAdvice를 이용하여 예외 처리하기
CommonException.java
package com.springmvc.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class CommonException {
@ExceptionHandler(RuntimeException.class)
private ModelAndView handleErrorCommon(Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", e);
modelAndView.setViewName("errorCommon");
return modelAndView;
}
}
errorCommon.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>예외 처리</title>
</head>
<body>
<nav class="navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h2 class="alert alert-danger">요청한 도서가 존재하지 않습니다.</h2>
</div>
</div>
<div class="container">
<p>${exception}</p>
</div>
<div class="container">
<p>
<a href="<c:url value='/books'/>" class="btn btn-secondary">도서목록 »</a>
</p>
</div>
</body>
</html>
'코딩 > spring' 카테고리의 다른 글
[16주 3일차] 로그 기록 : 로그 기록 만들기 (1) | 2024.01.24 |
---|---|
[16주 3일차] 로그 기록 (0) | 2024.01.24 |
[16주 2일차] 예외 처리 (0) | 2024.01.23 |
[16주 2일차] 파일 업로드 처리 : 이미지 파일 업로드하기 (0) | 2024.01.23 |
[16주 2일차] 파일 업로드 처리 (1) | 2024.01.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday