-
모델, 바인더, 예외 처리, 전역 컨트롤러 (스프링 MVC - 7)Programming/Spring MVC 2020. 3. 26. 21:21728x90
1. @ModelAttribute
- @Controller, @ControllerAdvice 를 사용한 클래스에서 모델 정보를 초기화 할 때 사용함
- @RequestMapping과 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어준다. (뷰는 요청 url로 찾음 - 리퀘스트 투 뷰 네임 트렌스레이터) <이렇게 잘 사용x>
@ModelAttribute public void categories(Model model) { model.addAttribute("categories", List.of("study", "hobby")) } @GetMapping("/events/model/test") @ModelAttribute public Event modelTest() { return new Event(); }
2. @InitBinder
특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용
@Controller public class SampleController { @InitBinder("event") public void initEventBinder(WebDataBinder webDataBinder) { // 바인딩 설정 webDataBinder.setDisallowedFields("id"); // 포메터 설정 webDataBinder.addCustomFormatter(new EventFormatter()); // Validator 설정 webDataBinder.addValidators(new EventValidator()); } }
public class EventValidator implements Validator { @Override public boolean supports(Class<?> aClass) { return Event.class.isAssignableFrom(aClass); } @Override public void validate(Object o, Errors errors) { Event event = (Event)o; if(event.getName().equalsIgnoreCase("aaa")) { errors.rejectValue("name", "wrongValue", "the Value is not allowed"); } } }
3. 예외 처리 핸들러 (@ExceptionHandler)
특정 예외가 발생한 요청을 처리하는 핸들러 정의
- REST API의 경우 응답 본문에 에러에 대한 정보를 담아주고, 상태 코드를 설정하려면 ResponseEntity를 주로 사용한다.
@Controller public class SampleController { @ExceptionHandler public String eventErrorHandler(EventException e, Model model) { model.addAttribute("message", "event exception"); return "/error"; } }
4. 전역 컨트롤러 (@ControllerAdvice)
모델 객체 설정, 바인딩 설정, 예외 처리를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용
- @ExceptionHandler
- @InitBinder
- @ModelAttributes
적용할 범위를 지정할 수도 있다.
- 특정 애노테이션 가지고 있는 경우
- 특정 패키지 이하의 컨트롤러에만 적용하기
- 특정 클래스 타입만 적용하기
인프런 백기선님 '스프링 MVC’ 강의를 듣고 정리한 내용입니다.
728x90'Programming > Spring MVC' 카테고리의 다른 글
핸들러 메소드 - 2 (스프링 MVC - 6) (0) 2020.03.26 핸들러 메소드 - 1 (스프링 MVC - 5) (0) 2020.03.24 요청 맵핑하기 (스프링 MVC - 4) (0) 2020.03.24 WebMvcConfigurer (스프링 MVC - 3) (0) 2020.03.22 서블릿 애플리케이션 (스프링 MVC - 2) (0) 2020.03.22