6

Spring アプリケーションでリクエスト マッピングを動的にしたいと考えています。私のURLが理解できないように。また、ユーザーにとって意味のないものを表示することができ、それでもマッピングの目的は解決されます。

そのために、URL の動的部分をプロパティ ファイルに保存しています。@RequestMappingそして、それを注釈で使用したい。JSP のクライアント側でも同じことが行われます。プロパティ ファイルから値を読み取り、href を作成します。

@Value注釈を使用してプロパティ ファイルの値を読み取ります。

そのようなすべての値を最終的な静的変数に保持するクラスが 1 つあります。

public class UrlMappingAbstraction {
    public static final @Value("#{urlAbstractionProperties['url.message']?:'message'}") String MESSAGE = "";
}

そして、コントローラーでこのクラスを拡張し、以下のように @RequestMapping アノテーションで static final フィールドを使用しています。

@RequestMapping(value="/"+MESSAGE+"/{id}", method=RequestMethod.GET)

<spring:message/>また、jspでも、hrefのURLを使用して生成するプロパティファイルから値を読み取っています。

問題は、jsp がプロパティ ファイルの値に基づいて正しい URL を作成できることですが、@RequestMapping アノテーションでは値が置き換えられません。

誰でも正確な問題を教えてもらえますか? 初期化後に static final 変数の値を変更できないことはわかっています。では、@Value アノテーションの用途は何ですか。

これが別の方法で実行できる場合は、それを表示することもできます。

前もって感謝します。

4

2 に答える 2

6

注釈はその性質上静的であるため、このようにすることはできません。

@Valueフィールドでは使用できませんがstatic、ここでは問題ありません。実際の問題は、コンパイル時定数以外の値を注釈の属性として使用する方法がないことです。

次のいずれかの方法を使用できます。

  • URL 書き換えフィルター ( thisまたはthisなど) を追加し、必要な変換を実行するように構成します。

    このアプローチは、責任が明確に分離されているため、よりエレガントに見えます。コントローラーはジョブを実行し、書き換えフィルターは URL の難読化を担当します。

  • RequestMappingHandlerMapping. getMappingForMethod()このステップで URL パターンをオーバーライドして変更することにより、コントローラー マッピングの作成をインターセプトします (テストされていません)。

于 2013-01-21T14:01:04.530 に答える
0

@axtavtの提案を、逆に行うべきだと言って補強します。メッセージ URL ランタイムを構成可能にする必要は本当にありますか?

あなたが持っているのと同じように静的変数を作るだけではなく、@Value.

public final class UrlMapping {
    public static final String MESSAGE = "message";
}

次に、JSP でプロパティ ファイルの代わりに UrlMapping.MESSAGE を参照します。

それほど柔軟ではありませんが、はるかに単純であり、Javascriptまたはテンプレートで必然的に何かをハードコーディングするため、エンドポイントURLを構成可能にしすぎるのは悪い考えです. また、URL の変更は SEO に悪影響を及ぼします。

于 2013-01-21T14:15:14.043 に答える