custom exception만들고 사용하기
NoDeliveryException-커스텀익셉션 클래스 만들기.
DataAccessexception을 상속받는다.
public class NoDeliveryException extends DataAccessException{
//생성자의 인자로 예외메세지를 전달받아서
public NoDeliveryException(String msg) {
//부모생성자에 전달하면
super(msg);
//message 필드에 저장된다.
}
}
exception controller
NoDeliveryException이 발생되면 exception이라는 이름으로 NoDeliveryException이 전달되게하고 error/data_access로 포워드이동시킨다.
@ControllerAdvice
public class ExceptionController {
//custom예외처리
@ExceptionHandler(NoDeliveryException.class)
public ModelAndView noDelivery(NoDeliveryException nde) {
ModelAndView mView=new ModelAndView();
mView.addObject("exception",nde);
mView.setViewName("error/data_access");
return mView;
}
}
error/data_access.jsp
exception은DataAccessexception을 상속받은 NoDeliveryException이다.
.message로 exception message를 얻어올 수 있다.
DataAccessexception은 getMessage를 가지고있다.
<div class="container">
<h1>DB관련 예외발생!</h1>
<p class="alert alert-danger">${exception.message }</p>
<a href="${pageContext.request.contextPath}/home.do">인덱스로 가기</a>
</div>
custom exception사용하기
OrderDaoImpl
Orderdao에서 커스텀익셉션 시험해보기 위해 50프로 확률로 에러가 발생되게 만들었다.
@Repository
public class OrderDaoImpl implements OrderDao{
@Autowired
private SqlSession session;
@Override
public void addOrder(OrderDto dto) {
//테스트를 위해 50%의 확률로 예외 발생시키기
Random ran=new Random();
int ranNum=ran.nextInt(2);
if(ranNum==0) {
throw new NoDeliveryException("배송이 불가능합니다.");
}
//주문 테이블에 주문 추가
session.insert("shop.addOrder",dto);
}
}
404(500)에러 처리 페이지 만들기
web.xml
<!--404.500에러페이지 -->
<error-page>
<error-code>404</error-code>
<location>/error/404.do</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.do</location>
</error-page>
servlet-context
/error/404.do요청이 왔을 때 /WEB-IMF/views/error/404로 포워드 이동하겠다는 내용
<!-- web.xml에서 설정된 error관련된 요청처리 -->
<view-controller path="/error/404.do" view-name="error/404"/>
<view-controller path="/error/500.do" view-name="error/500"/>
/error/404.jsp
<div class="container">
<h1>404</h1>
<p class="alert alert-danger">
요청하신 페이지는 존재하지 않습니다.
<a href="${pageContext.request.contextPath}/home.do">확인</a>
</p>
</div>
'프로그래밍 기초 > SPRING' 카테고리의 다른 글
[Spring]트랜잭션과 예외 처리 (0) | 2020.02.10 |
---|---|
[Spring]게시판에 댓글 기능 구현 (1) | 2020.02.07 |
[Spring]게시물 이전글,다음글 보기 기능 구현 (0) | 2020.02.07 |
[spring]Anotation모음 (0) | 2020.02.04 |
[Spring]Mapper에서 별칭(Aliase)지정해주기 (0) | 2020.02.03 |