1

movie/{id}-{title}、 などのURL マッピングを持つコントローラーがあるとしますactor/{id}-{name}。これらのマッピングは、アプリ内のいくつかのオブジェクト (主にエンティティ) を識別します。これは RESTful サービスであると言えます。

これらの URI の作成を担当するメソッドをどこに置くべきかについての解決策を探しています。複数のJSPファイルや他の場所(リダイレクトなど)でそれらを作成するのは冗長だと思います。

最初に考えたのはpublic URI getURI()、コントローラーで使用されるクラスが実装するメソッドを持つインターフェイスを作成することでした。しかし、私の意見では、それはエンティティにあまりにも多くを巻き込みます - 私はエンティティが単にデータを表し、状態を変更するためのメソッドだけを含むことを好みます。

私の 2 番目のアイデアは、 や のようなオーバーロードされたメソッドを使用して を作成することでしたがURIService、コンパイル時のオーバーロード メソッドの選択に問題があります。たとえば、JSP の EL では、解決策としてメソッドの名前が異なるため、うまく機能しません。URI getURI(Movie m)URI getURI(Actor a)

車輪を再発明したくないので、その問題の解決策を知っているか、使用していますか?

4

1 に答える 1

0

ソリューションをどの程度エンタープライズ化したいと考えていますか? (半分冗談です)

解決策は次のとおりです。 のようなメソッドを持つサービスを用意してくださいURI getURI(Object o)。このメソッドは、渡されたオブジェクトが、URI パスを指定するアノテーションを持つクラスに属しているかどうかを確認します。注釈の例:

public @interface PathTemplate {String value();}

注釈付きのクラスの例:

@PathTemplate("/movie/{title}-{id}")
public class Movie {
  private int id;private String title;
  // getters and setters too
}

これで、getURIメソッドはパラメーター オブジェクトのクラスにPathTemplate注釈があることを確認し、Bean イントロスペクションを使用してパラメーターを補間します。出来上がり!拡張可能で比較的分離された URI 生成。

于 2013-08-06T20:58:16.657 に答える