2-18 @RequestMapping

서현우·2022년 5월 13일
0

스프링의정석

목록 보기
18/85

@ModelAttribute

적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션
반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능
key값을 생략하면, 타입의 첫글자를 소문자로해서 key로 함.

매개변수, 반환타입에 @ModelAttribute를 붙이면, 호출과 저장이 필요없게 됨.

	@RequestMapping("/getYoilMVC5") 
	//메서드 매개변수 앞에 @ModelAttribute
	//public String main(@ModelAttribute MyDate date, Model model) 아래와 동일
	public String main(@ModelAttribute("myDate") MyDate date, Model model) throws IOException
	//메서드 반환타입 앞에 @ModelAttribute
	private @ModelAttribute("yoil") char getYoil(MyDate date) {
		// TODO Auto-generated method stub
		return getYoil(date.getYear(), date.getMonth(), date.getDay());
	}

참조형 매개변수 앞에 @ModelAttribute는 생략 가능.

컨트롤러 매개변수

  1. 기본형, String일 때는 @RequestParam이 생략 된 것.
  2. 참조형일 경우에는 @ModelAttribute이 생략 된 것.

WebDataBinder

  1. 타입 변환 : 타입이 일치 하지 않을 때
    타입 변환 후 에러나 결과를 BindingResult에 저장.
  2. 데이터 검증(Validation)
    데이터 검증 후 에러나 결과를 BindingResult에 저장.
  3. 컨트롤러로 작업 결과를 보내서 처리하게 함.
    (BindingResult result의 위치는 바인딩 할 매개변수 바로 뒤에 와야 함.)
@RequestMapping("/getYoilMVC6") 
	//@ModelAttribute 생략 가능. Model model도 필요없음.
    //BindingResult result는 바인딩 할 매개변수 바로 뒤에 위치.
	public String main(MyDate date, BindingResult result) throws IOException {
	System.out.println("result="+result);

catcher()메서드에 BindingResult 적용

BindingResult 적용 후 result로 에러에 대한 메서드 사용.

@ExceptionHandler(Exception.class)
	public String catcher(Exception ex, BindingResult result) {
		System.out.println("result="+result);
		FieldError error = result.getFieldError();
		ex.printStackTrace();
		
		System.out.println("code="+error.getCode());
		System.out.println("field="+error.getField());
		System.out.println("msg="+error.getDefaultMessage());

		return "yoilError";
	}

profile
안녕하세요!!

0개의 댓글