2016-04-07 19 views
3
@RequestMapping("/form") 
public String form(Model model, Integer id) 

せずにパラメータ名を取得する方法を、春には、パラメータIDの名前はIDです知っていると、それはあなたのためにそれをしないWebDataBinderのランタイムは、春には例えばデバッグ情報

+1

は、Javaコンパイラは、デフォルトではクラスファイルにデバッグ情報が含まれています。したがって、JVMは実行時にパラメータ名を推測できます。 'Integer id'は実行時に' id'として見つけられます。コードがデバッグ情報なしでコンパイルされた奇妙なケースでは、パラメータ名は '@RequestParam(name =" id ")Integer id'として指定できます。 – manish

答えて

1

をチェックする必要がこれは、あなたがそれを有効にする-parameters javacコマンドラインオプションを含める必要がJDK 8で導入されたのjavacの機能です。そして、あなたはこのようにパラメータ名を取得することができます:春のドキュメントから

String name = String.class.getMethod("substring", int.class).getParameters()[0].getName() 
System.out.println(name); 

3.3 Java 8 (as well as 6 and 7)

あなたはまた、として( -parametersコンパイラフラグに基づく)は、Java 8のパラメータ名の発見を使用することができますデバッグ情報を有効にしてコードをコンパイルする代わりに

パラメータ名の発見は常に可能ではなく、様々な 戦略は、このような放出された可能性があり、デバッグ情報 を探しているとして、試して使用できます。ParameterNameDiscovererクラスのJavadocで指定されているように

コンパイル時にargname のAspectJアノテートメソッドにオプションで付随するアノテーション値を探します。

この春プロジェクトに関連するJIRA項目へのリンクですJava 8 parameter name discovery for methods and constructors

JDK強化の提案JEP 118: Access to Parameter Names at Runtime

1

でそれに要求のparamの値をバインドすることができます。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/WebDataBinder.html

あなたがAPIに見ることができるように、WebDataBinderはJavaBeanのオブジェクトにWebリクエストパラメータからデータバインディングのためです。

WebDataBinderも検証と変換を担当しています。そのため、エディタやバリデータをカスタマイズした場合は、以下のようにコントローラのwebDataBinderに追加する必要があります。詳細については、

 @Controller 
     public class HelloController { 

      @InitBinder 
      protected void initBinder(WebDataBinder binder) { 
       binder.setValidator(yourValidator); 
       binder.registerCustomEditor(the clazz to conver to.class, "the name of the parameter", yourEditor); 
      } 
    ... 

、ドキュメントに

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

関連する問題