ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모델, 바인더, 예외 처리, 전역 컨트롤러 (스프링 MVC - 7)
    Programming/Spring MVC 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

    댓글

Designed by Tistory.