2013-06-11 3 views
5

私は、Spring MVCを使用してさまざまなRESTサービスの実装を進めています。ドキュメントについては、私はSwaggerを使用しています。複数の注釈を1つに結合して繰り返しを避ける

これはうまく動作し、ドキュメントはよく見え、実際に機能しています。私が持っている唯一の問題は、ドキュメンテーションの注釈が実際にコントローラクラス、特にエラーコードの注釈を群集にしていることです。

例:多くの場合

@ApiErrors(value = { 
    @ApiError(code = 123, reason = "Reason123"), 
    @ApiError(code = 124, reason = "Reason124"), 
    @ApiError(code = 125, reason = "Reason125"), 
    @ApiError(code = 126, reason = "Reason126"), 
    @ApiError(code = 127, reason = "Reason127") }) 
public void exampleFunctionImplementation() { 
} 

が、これは実際のアプリケーション・コードは間のどこかに隠されている注釈の大きなブロックにつながります。さらに、多くのメソッドが同じエラーコードのセットを返す可能性があるため、このアノテーションセットはしばしば繰り返されます。

アノテーションリストを別のクラスファイルの定数として定義することでこれを少し短縮するオプションはありますか?それとももっと単純な何かが見落とされているかもしれませんか?

私はどこか@ApiError項目の配列を定義してみましたが、これはコンパイルされません。

ApiError[] array = {ApiError(code = 123, reason = "Reason123")}; 

を誰が私に、事前に感謝し、この問題を解決するためにどのようにヒントを与えることができれば、私は喜んでいるだろう!

+0

どちらも同じ問題があります:http://stackoverflow.com/questions/14195155/ibatis-create-an-array-of-multiple-annotations-annotation-reuse – Anderson

答えて

1

注釈のメンバーには種類が限定されています(JLS 9.6)。

注釈型で宣言されたメソッドの戻り値の型は、次のいずれかでない場合には、コンパイル時のエラーです:プリミティブ型、文字列、クラス、クラス、列挙型(のいずれかのパラメータ化の呼び出し§8.9)、注釈型、または要素型が前の型の1つである配列型(10)

これらの値は定数式(JLS 9.7)でなければなりません。この標準では、に相応する用語を使用しています。

Tは配列型であるE []のいずれか:

Vは、V IN(配列初期化子でVariableInitializerに類似)ElementValueArrayInitializer各ElementValueあるEに見合いました。または

VはVのタイプであるE.

に見合ったElementValueある代入互換(5.2)また、T、および付き:

Tがプリミティブ型または文字列である場合、及びVは定数式です(§15.28)。

Vがnullではありません。

TがClassまたはClassの呼び出しであり、Vがクラスリテラル(15.8.2)である場合。

Tが列挙型であり、Vが列挙定数である場合。

あなたの配列は定数式ではないので、コードはコンパイルされません。大きな注釈リストがあることが予想される場合は、おそらくこのタスクを実行する別の方法があります。私はスワッガーを知らないので、あなたはこれを避けることができないかもしれません。

+1

どういうわけか、どういうわけか、私はそこに望みました何らかの形で注釈のセットを再利用するためにこれを賢い方法で使用します.-( – Volker

+0

Java 8が役立ちます。http://docs.oracle.com/javase/tutorial/java/annotations/repeating.htmlを参照してください。 –

+1

@EricJablow、thisトピックスターターはメソッド間の注釈を複製したくないため、彼は厄介な注釈を一度定義して他のメソッドに適用することを望みますが、Swaggerと同じ問題があります。 – walv

関連する問題