[spring] @ModelAttribute


@ModelAttribute

DOC를 구글 변역기로 돌려보면

@ModelAttribute컨트롤러에는 두 가지 사용 시나리오가 있습니다.

메소드 매개 변수에 배치하면 @ModelAttribute모델 속성을 주석이 달린 특정 메소드 매개 변수에 맵핑합니다 이것이 컨트롤러가 양식에 입력 된 데이터를 보유하는 객체에 대한 참조를 얻는 방법입니다.

@ModelAttribute메서드 수준에서 사용 하여 모델 에 대한 참조 데이터 를 제공 할 수도 있습니다 이 사용법을 위해 메소드 서명은 @RequestMapping주석 에 대해 이전에 문서화 된 것과 동일한 유형을 포함 할 수 있습니다 .

라고 한다.

매개변수에 배치

@RequestParam

@Controller
public class testController{
    @getMapping("/")
    public String getTest(@RequestParam("name") string name){
        System.out.println("이름 : " + name);
        return "test";
    }
}
/*
요청값 -> /?name=Lee
결과값 -> 이름 : Lee
*/

@ModelAttribute

@Getter
@Setter
public class TestModel{
	private String name;
	private int age;
}

@RestController
public class TestController{
	@GetMapping("/")
	public String getTest(@ModelAttrivute TestModel testmodel){
		System.out.println("이름 : " + testmodel.getName());
		System.out.println("나이 : " + testmodel.getAge());

        

	}
}
/*
/*
요청값 -> name=Lee&age=10
결과값 -> 이름 : Lee
          나이 : 28
*/

언듯보면 @RequestParam 과 같으면서 다르다.

  • 파라미터로 넘겨 준 타입의 오브젝트를 자동으로 생성한다
  • @RequestParam에서 유저를 만들려면 각각의 파라미터를 전부 받아서 모델을 생성해줘야한다.
  • 유저를 만들기 위해 (@ModelAttrivute User user) 이면 끝
@RequestMapping("/test")
public ModelAndView draw(@ModelAttribute("specified") MyModel myModel) {
    // ...
}

이후 VIEW에선 ‘specified’를 request.attribute에서 가져올 수 있다

매서드 수준에서 사용

-컨트롤러에서 뷰에 전달할 일종의 공통 모델을 설정한다.

-메서드가 리턴하는 값은 Request객체에 전달되며 전달 범위는 해당 메소드가 존재하는 컨트롤러 전체에 해당된다.

-@ModelAttribute 어노테이션이 적용된 메서드는 컨트롤러가 자동으로 호출한다. 단, 매 요청마다 반복 실행되므로 효율성을 고려해야 한다.

@ModelAttribute("myObject")
public String refModelTest() {
    return "hello-o";
    // request.setAttirubte("myObject", "hello-o") 와 같으며
    // 선언된 클래스의 전역으로 실행된다.
}
@ModelAttribute("user")
public Department getUserInfo(@RequestParam("userId") String userId){
	return userService.getUserInfo(userId); //DB에서 부서정보 데이터를 가져온다.
}
/*
화면에서 ${user.user_name} , ${user.user_age} 이렇게 쓰겠지
*/

정리

  • 파라미터로 넘겨 준 타입의 오브젝트를 자동으로 생성한다
  • 객체가 자동으로 Model객체에 추가되고 뷰로 전달된다.





© 2017. by isme2n