Spring MVC에서는 요청을 처리하는 메소드 매개 변수에 매개 변수을 쉽게 바인딩 할 수있다. 방금 @RequestParameter("name")
을 사용합니다. 하지만 속성 요청으로 동일한 작업을 수행 할 수 있습니까? 내가 요청 속성에 액세스 할 때 현재, 나는 다음을 수행해야합니다 :Spring MVC : 컨트롤러 메소드 매개 변수에 대한 요청 속성 바인드
MyClass obj = (MyClass) request.getAttribute("attr_name");
을하지만 난 정말이 대신 같은 것을 사용하고 싶습니다 : 불행하게도
@RequestAttribute("attr_name") MyClass obj
, 그렇지 않습니다 이런 식으로 일하십시오. 어떻게 든 스프링 기능을 확장하고 내 "바인더"를 추가 할 수 있습니까?
편집(달성하고자하는 것) : 현재 요청한 사용자의 내부 속성을 저장합니다. 그래서 내가 현재 로그인 한 사용자 (모든 메소드 내부에 있음)에 액세스하려고 할 때마다이 여분의 줄을 작성해야합니다. user = (User) request.getAttribute("user");
. 가능한 한 짧게 만들고 싶습니다. 메소드 매개 변수로 삽입하는 것이 바람직합니다. 아니면 인터셉터와 컨트롤러를 통해 무언가를 전달하는 또 다른 방법을 알고 있다면 나는 그것을 듣게 될 것이다.
@ModelAttribute("attr_name") MyClass obj
당신은 당신의 컨트롤러 방법에 대한 매개 변수에 그것을 사용할 수 있습니다
이것은 완벽합니다! 고맙습니다. – Raff
매개 변수 이름이 모델 객체의 속성과 일치하면 추가 getUser 메소드가 필요 없으며 Spring은 자동으로 해당 속성을 설정합니다. – chrismarx
이 방법으로 메소드의 User 객체는 뷰 모델뿐만 아니라 속성에서도 검색됩니다 들어오는 요청 또는 양식 매개 변수에 의해 Y 인드 (및 겹쳐 쓰기)됩니다. 예를 들어, User 객체에 많은 사용자 객체가있는 id 속성이 있고 요청 URL이나 양식에도 관련이없는 id 매개 변수가 있으면 User 객체의 id를 덮어 씁니다. 이것은 한때 내 코드에서 불쾌한 버그를 만들었습니다. 이 특별한 경우에는 @ModelAttribute의 양식 바인딩 속성을 원하지 않습니다. 대안은'User u = (User) model.get ("user");'를 사용하는 것입니다. – klausch