2011-09-06 12 views
5

RequestMappingでEnum値を使用する方法はありますか?文字列リテラルではなく@RequestMappingの値を使用できますか?

@RequestMapping(value = "/example", 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

すでにEnumに格納されているURL値を使用します。

しかし、RequestMappingに文字列リテラル以外のものを入れようとすると、コンパイル時エラーが発生します。

文字列リテラルと文字列リテラルではない文字列の違いをどのように知っていますか?

これは私が試したものですが、それはコンパイル時に失敗しました:

@RequestMapping(value = FooEnum.Example.getStringValue(), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

私もString.formatを使用してみましたが、それはそのどちらか好きではない:

@RequestMapping(value = String.format("%s", FooEnum.Example.getStringValue()), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

答えて

1

のみリテラル値を割り当てることができます注釈が処理されるときにコンパイル時に知る必要があるため、注釈属性に追加する必要があります。はい、列挙型の値を使用できます。「列挙型の値」はFooEnum.Exampleですが、文字列値をとる属性ではなく、メソッドを呼び出すことはできません。

+2

定数ではなく、 '' PO "+" ST "'などの式であっても定数(コンパイル時)の値ではなく、*のみ*ではありません。これは、 'RequestMethod.POST'がアノテーション内の有効な属性値であるが、メソッド呼び出しがそうでない理由です。 –

0

URLを列挙型の値にするのは面白そうです。列挙型を更新した場合、URLが変更されないようにしたいと思います。これらの同じ列挙型を使用して実際にクライアントリンクを生成していますか?代わりに、あなたはSpringのHandler BeanにURLを問い合わせることができますか?

ありまたSpring Expression Languageだが、私はそれは@value注釈で働くことを知って、私はあなたが一つの方法で複数のURLをキャッチしようとしている場合

を@RequestMappingわからないんだけど、あなたは@PathVariableを使用することができます

関連する問題