3

次のようなスプリング REST API にヘッダーを渡しています。

@RequestHeader(value="test-header")

ヘッダーはここでは API に必須であるため、オプションのままにしたくありません。ヘッダーが渡されない場合、API への呼び出しは、要求が構文的に間違っていることを示す標準の 400 エラーを返し、REST API に入りません。しかし、適切な ResponseBody を作成し、このエラーに対して json を返したいと思います。これを行う最善の方法についてはわかりません。スプリングインターセプターを使ってこのヘッダーが通ったかどうかを確認しようと思ったのですが、ここからレスポンスボディを作成できるかどうかわかりません。少なくとも私はそうする方法を理解できませんでした。

インターセプターアプローチはこれで機能しますか? はいの場合、どのように?そうでない場合、オプションは何ですか?誰かがこれについて助けてくれますか?

アップデート:

REST API は次のようになります。

public void methodA(@RequestHeader(value="test-header") String header, @RequestBody User user, HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
...
...

} 

ヘッダーが存在する場合、REST API に入り、ロジックを続行します。ただし、ヘッダーが存在しない場合は、API に入らず、単に標準の 400 エラーを返します。

私が書いたインターセプターは次のようなものです:

public class XXXInterceptor extends HandlerInterceptorAdapter { 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...
...
...

return true;
}

}

4

3 に答える 3

1

STEP1: @validなどのスプリングバリデータアノテーションを使用して、リクエストを検証します。

ステップ 2:カスタム バリデータ クラスを記述します。これは、ヘッダーをチェックして、値があるかどうか、または期待される値があるかどうかを確認する責任があります。

ステップ 3:リクエストが正しくない場合、バリデータはカスタム例外をスローします。

ステップ 4:例外ハンドラ クラスを記述します。クラスで、STEP 3 で例外がキャッチされた場合に返さなければならない応答を定義します。

Spring での例外処理の詳細については、 を参照してください。

現在のプロジェクトでは、Java インターセプターを使用してリクエストを認証しますが、それ以上のものはありません。

于 2015-10-15T01:00:11.170 に答える