티스토리 뷰

카테고리 없음

Spring MVC 예외처리

moneyt19 2022. 10. 26. 22:04

Spring MVC 5-8 예외처리

HandlerExceptionResolver 인터페이스

다양한 예외 발생 시 적절한 에러화면을 보여줄 필요가 있음

HandlerExceptionResolver 인터페이스를 구현한 클래스들

HandlerExcpetionResolver 클래스 설명
AnnotationMethodHandlerExceptionResolver @ExceptionHandler Annotation이 적용된 메소드를 이용해서 예외를 처리한다.
DefaultHandlerExceptionResolver NoSuchRequestHandlingMethodException 같은 Spring 관련 예외 타입을 처리한다.
SimpleMappingExceptionResolver 예외 타입 별로 View 이름을 다르게 지정할 때 사용한다.

Spring XML 설정 파일에 HandlerExceptionResolver를 등록하지 않으면 기본으로 AnnotationMethodHandlerExceptionResolver DefaultHandlerExceptionResolver가 사용됨.

@ExceptionHandler 사용

Controller 메서드의 일종이다.

AddBoardController.java
@Controller
@RequestMapping("/addBoard.do")
public class AddBoardController {
@RequestMapping(method=RequestMethod.POST)
public String addBoard(BoardVO board) {
MultipartFile uploadFile = board.getUploadFile();
// uploadFile 정보가 없는 경우 NullPointerException 발생
String fileName = uploadFile.getOriginalFilename();
boardService.addBoard(board);
return "redirect:getBoardList.do";
}
@ExceptionHandler(NullPointerException.class)
public String handleException(NullPointerException exception) {
return "common/error.jsp";
}
}

@ExceptionHandler 사용 이어서

Exception 정보를 에러 정보 화면으로 전달하려면 파라미터로 전달 받아 처리함.

@ExceptionHandler(Exception.class)
public ModelAndView myExceptionHandler(HttpServletRequest request,

HttpServletResponse response, Exception ex) {
......
}

SimpleMappingExceptionResolver 사용

@ExceptionHandler는 각 컨트롤러마다 작성해야 하지만 이 방법은 Global하다.

applicationContext.xml
<beans ...>
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">common/nullException.jsp</prop>
<prop key="java.lang.Exception">common/exception.jsp</prop>
</props>
</property>
</bean>
</beans>

주의사항

SimpleMappingExceptionResolver Bean으로 등록하면 AnnotationMethodHandlerExceptionResolver는 작동되지 않음.

따라서 두가지를 동시에 사용하고 싶다면, 명시적으로 AnnotationMethodHandlerExceptionResolver bean을 등록해줄 것

댓글