2

通常、Spring は、パスが一致しなかった要求マッピングに対して 404 応答を返し、パスが一致したが「Accept」ヘッダーが一致しなかった場合は 406 を返します。

Accepted 形式でフォルトを返すことによって残りのフォルトを処理する「キャッチオール」として機能するデフォルトのコントローラがあります。コントローラーの形式は次のとおりです。

@Controller
public class DefaultController {
    @RequestMapping("/**")
    public void unmappedRequest(HtpServletRequest req) {
        throw new ResourceNotFoundException();
    }
}

問題は、ここで一致した場合、他の場所で一致したかどうかわからないことです。Acceptクライアントに正しいエラーを返し、再試行できるタイプを伝えたいと思います。現在、私ができることは、一般的なResourceNotFound例外をスローすることだけです。

これは私ができることですか、@Controllerそれとも何らかのフィルタ チェーンを作成する必要があるのでしょうか?

FWIW私は、Stormpathによって実証されたReST例外処理パターンを使用しています

4

1 に答える 1

1

キャッチオールコントローラーが「マップされていないURL」を処理する良い方法だとはまったく思いません。

Spring が提供する Default 実装に依存せずに、AbstractHandlerExceptionResolver のカスタム実装を実装することをお勧めします。doResolveException を拡張して、要求と応答で必要なほとんどすべてのことを行うことができます。

このカスタム ExceptionResolver を特定のコントローラー (REST コントローラー) のみに適用する場合は、必要なコントローラーのリストを使用して、例外リゾルバーに mappingHandlerClasses を設定できます。また、デフォルトのリゾルバーの前にカスタム例外リゾルバーの順序を設定することもできます。

私がここで話題から外れていると思われる場合は、お知らせください。

于 2013-04-19T11:23:30.157 に答える