1

ExceptionHandlerは、ModelAndView、Model、Mapなどを返すことができます。自分のタイプのオブジェクトを返し、自分のタイプをSpringが理解できるタイプの1つに変換できるトランスフォーマーを登録することはできますか?例えば:

@ExceptionHandler
public MyType handle(Exception e) {
  ...
}

@SomeTransformer
public Map convert(MyType myObject) {
   ...
}
4

2 に答える 2

1

ExceptionHandlerメソッドは、Controllerメソッドが従うのと同じコントラクトに従います。 これは、Spring3.1でサポートされているすべてのSpringMVCコントローラーメソッドのリターンタイプのリストです箇条書き#7はあなたにとって最も興味深いものです。

関連する部分:

16.3.3.2サポートされているメソッドの戻り型

サポートされている返品タイプは次のとおりです。

  • ModelAndViewオブジェクト。モデルは、コマンドオブジェクトで暗黙的に強化され、@ModelAttribute注釈付き参照データアクセサーメソッドの結果が含まれます。

  • RequestToViewNameTranslatorを介して暗黙的に決定されたビュー名と、コマンドオブジェクトで暗黙的に強化されたモデル、および@ModelAttribute注釈付き参照データアクセサーメソッドの結果を含むModelオブジェクト。

  • モデルを公開するためのMapオブジェクト。ビュー名は、RequestToViewNameTranslatorを介して暗黙的に決定され、モデルは、コマンドオブジェクトと、@ModelAttribute注釈付き参照データアクセサーメソッドの結果で暗黙的に強化されます。

  • コマンドオブジェクトと@ModelAttribute注釈付き参照データアクセサーメソッドを介してモデルが暗黙的に決定されたViewオブジェクト。ハンドラーメソッドは、Model引数を宣言することにより、プログラムでモデルを強化することもできます(上記を参照)。

  • 論理ビュー名として解釈される文字列値。モデルは、コマンドオブジェクトと@ModelAttribute注釈付き参照データアクセサーメソッドによって暗黙的に決定されます。ハンドラーメソッドは、Model引数を宣言することにより、プログラムでモデルを強化することもできます(上記を参照)。

  • メソッドが応答自体を処理する場合(応答コンテンツを直接書き込むか、その目的でServletResponse / HttpServletResponseタイプの引数を宣言する)、またはビュー名がRequestToViewNameTranslatorを介して暗黙的に決定されることになっている場合(応答引数を宣言しない場合)は無効です。ハンドラーメソッドの署名)。

  • メソッドに@ResponseBodyの注釈が付けられている場合、戻りタイプは応答HTTPボディに書き込まれます。戻り値は、HttpMessageConvertersを使用して宣言されたメソッド引数タイプに変換されます。16.3.3.5項「@ResponseBodyアノテーションを使用した応答本文のマッピング」を参照してください。

  • サーブレット応答HTTPヘッダーおよびコンテンツへのアクセスを提供するHttpEntityまたはResponseEntityオブジェクト。エンティティ本体は、HttpMessageConvertersを使用して応答ストリームに変換されます。セクション16.3.3.6「HttpEntityの使用」を参照してください。

その他の戻りタイプは、メソッドレベルで@ModelAttributeを介して指定された属性名(または戻りタイプのクラス名に基づくデフォルトの属性名)を使用して、ビューに公開される単一のモデル属性と見なされます。モデルは、コマンドオブジェクトと、@ModelAttribute注釈付き参照データアクセサーメソッドの結果で暗黙的に強化されます。

于 2013-03-20T17:37:09.873 に答える
1

aspectjもちろん、アフターアドバイスを使ってやりたいことをすることもできます。

private pointcut transformer() : execution(@SomeTransformer * *(..));

after() returning (Object o): transformer() {
      System.out.println("I'd like to transform this object " + o);
}

しかし..なぜあなたがそれをやりたいのか分かりません..?

免責事項:これはテストされていません。

于 2013-03-20T20:57:22.917 に答える