티스토리 뷰

 

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">도서목록 &raquo;</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">도서목록 &raquo;</a>
      </p>
   </div>
</body>
</html>

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday