2012-04-03 4 views
0

私は次のような方法でSpring MVCのコントローラがあります。Spring MVCの - どのように(おそらく@RequestParam属性によって)@RequestMethodメソッドのパラメータのリストを取得する

@RequestMapping(value = {"/filter"}, method = RequestMethod.GET) 
    @ResponseBody 
    public List<MetricType> getMetricTypes( 
      @RequestParam(value = "subject", required = false) Long subjectId, 
      @RequestParam(value = "area", required = false) Long areaId, 
      @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren, 
      @RequestParam(value = "componentGroup", required = false) Long componentGroupId  
      ) throws Exception 
    { 
     //Some code 
    } 

はのパラメータのリストを取得することは可能です現在のメソッドはプログラムで(@RequestParamアノテーションなどによって)? ソリューションはデバッグシンボルなしで動作するはずです。 必要に応じてメソッド名をハードコードすることができます。

クエリ文字列に無効なパラメータが含まれているかどうかを確認しようとしています(たとえば、誤植など)。 リクエストのクエリパラメータ名とメソッドシグネチャのクエリパラメータ名(可能な場合)を比較します。

UPDATED

ソリューションは、同様に(偽=必須)オプションのパラメータのために働く必要があります。

感謝

マキシム

+0

なぜあなたはtypo'edパラメータを受け入れるでしょうか?すべてのパラメータは、あなたのウェブアプリケーションと通信しているウェブサイトにハードコードされている可能性が高いです。 – Geerten

+0

私はtypo'edパラメーターを拒否したい。 param名にタイプミスがある場合、エラーメッセージを表示したい。これを行うために、私はユーザが渡したパラメータをメソッドシグネチャと比較したいと思っています –

+0

RequestMappingはtypoされたパラメータを既に拒否しています。比較する利点は何ですか? – Geerten

答えて

2

あなたはHttpServletRequest request

public List<MetricType> getMetricTypes( 
      @RequestParam(value = "subject", required = false) Long subjectId, 
      @RequestParam(value = "area", required = false) Long areaId, 
      @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren, 
      @RequestParam(value = "componentGroup", required = false) Long componentGroupId , 
HttpServletRequest request 
      ) throws Exception 

としてを使用して、すべての要求は

request.getParameterNames() 

として名をパラメータとやるためにそれらにループを使用して取得することができますあなたの仕事は

です
for (String parameterName:requestParameterNames){ 

} 
+0

あなたの貢献に感謝します。私は "現在のメソッドの**パラメータのリストを取得することは可能ですか?"と要求しましたが、リクエストで渡されたパラメータの実際のリストではありません。メソッドのシグネチャからパラメータのリストを取得する必要があります(おそらく@RequestParamアノテーションを使用しています)。 –

+0

これを手動で実行します。すべての既知のパラメータを持つクラスを作成し、@ModelAttributeを使用することができます –

関連する問題