2011-10-24 9 views
7

に接頭辞を持つ私は、次のGETリクエストがあります。春3つのMVC - 地図リクエストパラメータ単一のBean

/api/search?filter.operation=Ping&filter.namespace=

をパラメータ名は、接頭辞(フィルタ操作、フィルタを含むのでご注意ください。名前空間)。

はその後、私はそれらのパラメータを受信するために使用する、次のBeanがあります。

class MessageSearchFilter { 
    String operation; 
    String namespace; 
    ... 
} 

をハンドラメソッドのシグネチャは次のとおりです。

public @ResponseBody String searchMessages(MessageSearchFilter filter, ...);

しかし、これはそうではありませんSpring MVCは 'operation'と 'namespace'の属性にちょうど同じ名前を付けると期待しています。 'operation'と 'namespace'( 'filter'接頭辞なし)を使用するようにリクエストを変更すると動作します。

Springにパラメータに 'filter'という接頭辞が付いていると言うことができますか?

これに関する別の質問は、プロパティ名が衝突する複数のフォームオブジェクトを持つメソッドシグネチャがあるとどうなりますか?

答えて

0

あなたは@RequestParamを使用して、着信クエリ文字列パラメータをマッピングすることができるはず、とあなたは完全に修飾することができます

//Your @RequestMapping here... 
public @ResponseBody String searchMessages(
    @Requestparam("filter.operation") String filterOperation, 
    @RequestParam("filter.namespace") String filterNamespace) { 
    MessageSearchFilter messageSearchFilter = new MessageSearchFilter(); 
    messageSearchFilter.operation = filterOperation; 
    messageSearchFilter.namespace = filterNamespace; 
    //do your thing here... 
} 

また、あなたは今、プロパティ名の衝突で、他のオブジェクトの修飾子を追加できるようにする必要があることに気づくでしょう。

+1

しかし、手動でBean値を手動で作成して設定することを避ける方法を探していました。私はSpringがネストしたbeanに対してこれを正しく実行するので、何とか動作すると思います。 – jjmontes

+0

これらのプロパティを直接Beanに挿入するSpringの方法がある場合は、私も興味がありますか? – davorp

1

方法仕事をする必要があります

@Override 
protected String getFieldBindingPrefix() { 
    return "filter."; 
} 

あなたのコントローラに追加します。

+0

答えをもう少し説明できますか?私はGoogleでその方法について何も発見していません。私のコントローラクラスでオーバーライドするためのgetFieldBindingPrefix()メソッドもありません。 :-( – raspayu

関連する問題