2012-12-06 3 views
0

@ModelAttribute이라는 주석이있는 스프링 MVC 컨트롤러에서 동작 메소드가 있습니다. 그러나 컴파일 타임에이 매개 변수의 유형이 무엇인지 알지 못합니다. 추상 기본 유형은 알고 있지만 파생 유형은 알지 못합니다.Spring MVC에서 ModelAttribute 어노테이션이 수동으로 수행하는 작업

런타임에, 나는 내가 기대하는 클래스를 결정할 수있을 것이고, 나는이 클래스의 new'd 인스턴스를 얻을 수있을 것이다. 그러나, 나는 어떤 코드가 요청 데이터를 구문 분석 할 때 같은 형식으로 @ModelAttribute과 같은 방식으로 호출해야하는지 잘 모른다.

주위를 둘러 보았습니다. WebRequestDataBinder을 보유 할 수 있지만 내 객체를 채울 때 사용할 수 있지만, BinderFactory이 필요하고 이것이 내가 잃어버린 곳입니다.

아무에게도 나에게 약간의 조언을 줄 수 있습니까? 아니면 내가 잘못보고있는 것을보고 다른 것을해야 할 필요가 있습니까?

답변

0

컨트롤러 메소드에 모델 자체를 삽입하고 직접 속성에 액세스 할 수 있습니다.

@RequestMapping(...) 
public void doStuff(ModelMap model) { 
    Object attr = model.get("nameOfAttribute"); 
    // ... 
} 
+0

이것은 복잡한 객체 또는 기본 값에 대해서도 작동합니까? 어떤 수업을 사용해야하는지 어떻게 알 수 있습니까? – efdee

+0

@efdee 당신이 모델에 넣은 타입에 관계없이 작동 할 것입니다. 여러분의 의견을 생각할 때, 여러분은'@ ModelPolam'에 대해 이야기하고있는 것처럼 들리고'@ ModelAttribute'에 대해서는 이야기하지 않는 것 같습니다. '@ ModelAttribute'로 작업하면 보통 모델 내부에있는 것을 제어하게됩니다. 어쩌면 우리는 교차 목적으로 이야기합니다. 당신이하고있는 일을 명확히하기위한 코드를 제공 할 수 있습니까? – Yevgeniy

+0

'@ RequestParam'은 요청 매핑에서 오는 매개 변수에 대한 것이라고 생각했습니다. '/ users/: id'의 경우, id는'@ RequestParam'입니다. 데이터가 포함 된 양식이 있으며이를 내 컨트롤러에 다시 게시하려고합니다. 과거에'@ ModelAttribute'를 사용하여 데이터를 실제 객체로 가져 왔습니다. 그러나이 특정 양식은 동적으로 작성되므로 데이터를 파싱하는 데 사용할 구체적인 클래스를 컴파일 타임에 컴파일 할 수 없습니다. 그러나 런타임에 어떤 것을 검사 할 수 있으므로 어떤 유형인지 알게됩니다. – efdee

관련 문제