Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MySQL
- html
- fragment
- R프로그래밍
- error
- CSS사용법
- spring
- Eclipse
- apache gzip
- Android Apk 이름 변경
- Android Apk
- android fragment
- android error
- 안드로이드
- Android Apk 이름
- java error
- release unsigned
- Kotlin
- Android
- release Apk
- DataTable
- jQuery
- css
- tomcat
- Firebase
- JavaScript
- Exception
- Program type already present
- Java
- FLUTTER
Archives
- Today
- Total
selfstarter
@ControllerAdvice JavaConfig 본문
@ControllerAdvice JavaConfig
예외 처리
- 예외상황을 예외 클래스를 만들어서 처리하면 예외 처리 중복 코드를 없앨 수 있다
- @ControllerAdvice는 오류를 처리하는 Controller임을 나타내는 어노테이션
- CommonExceptionAdvice class 생성
- @ ComponentScan 어노테이션으로 CommonExceptionAdvice class를 검색할 수 있도록 만든다
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;
@ControllerAdvice
public class CommonExceptionAdvice {
private static final Logger logger = LoggerFactory.getLogger(CommonExceptionAdvice.class);
// exception 이 발생하고 try~catch 문이 아닌 호출된 곳에서 처리하도록 하면 여기에 들어온다
@ExceptionHandler(Exception.class)
public String except(Exception ex, Model model) {
logger.info("Exception........" + ex.getMessage());
model.addAttribute("exception", ex);
logger.error(model.toString());
return "error/error_page";
}
}
- 에러 페이지 생성
- 깔끔한 error text 여러줄이 출력된다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Error Page</title>
</head>
<body>
<h4><c:out value="${exception.getMessage()}"></c:out></h4>
<ul>
<c:forEach items="${exception.getStackTrace() }" var="stack" >
<li><c:out value="${stack}"></c:out></li>
</c:forEach>
</ul>
</body>
</html>
404에러 처리
- 404에러 처리는 NoHandlerFoundException.class 에러가 발생한다
- @ResponseStatus는 응답값에 특정한 상태값을 전달한다
- CommonExceptionAdvice class 내에 정의한다
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "error/error_404";
}
- 404 jsp 페이지를 추가한다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Error Page</title>
</head>
<body>
<h1>404 찾을 수 없는 페이지 입니다</h1>
</body>
</html>
- WebConfig class에서 customizeRegistration 함수를 재정의 한다
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
}
- servlet api는 3.0 버전 이상이여야 한다
- pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
'Server > Spring' 카테고리의 다른 글
json list 안에 list 읽기 (0) | 2019.07.15 |
---|---|
Spring resources 위치 가져오기 (0) | 2019.07.13 |
전자정부프레임워크(egov) logback 설정 (0) | 2019.07.12 |
Invalid bound statement error 해결 (1) | 2019.07.10 |
Spring JavaConfig 다국어 처리 (0) | 2019.06.25 |
Comments