Spring MVCでは、リクエストパラメーターを要求を処理するメソッドパラメーターにバインドするのは簡単です。私はちょうど@RequestParameter("name")
を使用します。しかし、私は要求属性で同じことをすることはできますか?現在、私が要求属性にアクセスしたいとき、私は次の操作を実行する必要があります。Spring MVC:コントローラーメソッドパラメーターへのバインド要求属性
MyClass obj = (MyClass) request.getAttribute("attr_name");
しかし、私は本当に代わりに、このようなものを使用したいと思います:
@RequestAttribute("attr_name") MyClass obj
は残念ながら、それはしていませんこのように働く。どういうわけかSpringの機能を拡張して、自分の "バインダー"を追加できますか?
EDIT(私が達成しようとしているものを):私は要求属性内で、現在ログインしているユーザーを格納します。ですから、現在ログに記録されているユーザー(すべてのメソッドのかなりの部分)にアクセスしたいときは、この余分な行を書く必要があります。user = (User) request.getAttribute("user");
私は可能な限り短くしたい、好ましくはメソッドパラメータとして注入する。また、インターセプタとコントローラ間で何かを渡す方法の別の方法を知っていれば、私はそれを聞いてうれしいです。
これは完璧です!ありがとうございました。 – Raff
パラメータ名がモデルオブジェクトのプロパティと一致する場合、追加のgetUserメソッドは必要ありません。春はこれらのプロパティを自動的に設定します – chrismarx
この方法では、メソッドのUserオブジェクトはビューモデルから取得されるだけでなく、着信要求またはフォームのパラメータによってバインド(および上書き)されます。たとえば、Userオブジェクトに(多くのユーザーオブジェクトが持つ)idプロパティがあり、リクエストurlまたはフォームにも関連のないidパラメータがある場合、Userオブジェクトのidが上書きされます。これはかつて私のコードに厄介なバグを作りました。この特定のケースでは、@ModelAttributeのフォームバインドプロパティは必要ありません。代わりに 'User u =(User)model.get(" user ");'を使用しています。 – klausch