Programming/Spring MVC
모델, 바인더, 예외 처리, 전역 컨트롤러 (스프링 MVC - 7)
흠냐아뤼
2020. 3. 26. 21:21
728x90
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