본문 바로가기

스프링/스프링 MVC

(12)
전역 컨트롤러: @(Rest)ControllerAdvice @(Rest)ControllerAdvice 예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다. 예외를 처리하는 @ExceptionHandler와 함께 사용하면 전반에 걸친 예외처리가 가능하다. 바인딩 또는 검증을 설정할 수 있는 @InitBinder와 함께 사용하면 전반에 걸친 바인딩 설정이 가능하다. 모델 정보를 초기에 초기화할 수 있는 @ModelAttribute와 함께 사용하면 전반에 걸친 모델 정보 설정이 가능하다. 예제 이전 게시글들에서 작성한 @InitBinder, @ModelAttribute, @ExceptionHandler를 @ControllerAdivice로 정의한 BaseController에 작성하였다. 빨간 줄처럼 @ControllerAd..
예외 처리 핸들러: @ExceptionHandler @ExceptionHandler 어떤 요청을 처리하다가 예외들이 발생했을 때 직접 정의한 핸들러를 통해 예외를 처리해서 응답할 수 있다. 예제 RuntimException을 상속받은 EventException을 하나 만들었다. 그리고 예외가 발생했을 때 보여줄 페이지를 만든다. 빨간 박스의 message에 예외 메시지를 담아 보여줄 것이다. 컨트롤러에서 @ExceptionHandler를 사용한 메서드를 하나 작성한다. 메서드 파라미터에 원하는 Exception을 넣으면 예외 처리가 가능하다. EventException을 파라미터로 넣었으므로 EventException 발생 시 eventErrorHandler가 동작하여 message를 담아 줄 것이다. 그리고 위에서 작성한 error.html로 view를..
데이터 바인더: @InitBinder @InitBinder 특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용한다. 바인딩 설정 event의 id값은 데이터 바인더를 통해 받아오지 않게 하기 이벤트 클래스와 resources/templates/events/ 에 form.html을 이렇게 작성하였다. 모델을 통해 뷰에게 넘겨주고 그것을 Postmapping으로 받아오는 컨트롤러를 작성하였다. 디버그 모드로 웹을 띄우고 event값을 확인하면 모든 값이 제대로 전달된 것을 알 수 있다. 데이터 바인더 적용 @InitBinder를 이용해 데이터 바인더를 적용한 후 id를 setDisallowedFields에 추가한다. 그리고 동일하게 디버그 모드로 웹을 띄워서 데이터를 전송해보면 id값은 걸러진 것을 알 수 있다. 아래와 같이 In..
모델 @ModelAttribute @ModelAttribute 사용법 1. @RequestMapping을 사용한 핸들러 메서드의 아규먼트에 사용하기 지난 게시글에서 사용해본 방법이다. 2.@Controller 또는 @ControllerAdvice를 사용한 클래스에서 모델 정보를 초기화할 때 사용한다. 첫 번째 방법 모든 핸들러에서 공통적으로 참고해야 하는 모델 정보가 있을 때 매번 각 핸들러에서 모델 정보를 받지 않고 @ModelAtrrtibute를 이용하면 모든 핸들러에게 제공된다. 테스트 두 번째 방법 만약 모델에 담을 객체가 하나라면 이렇게 하여도 정상적으로 동작한다. 참고 자료