[解決済み] Springのフィルターでスローされる例外をどのように管理するか?
2022-04-25 17:36:56
質問
5xxエラーコードを管理する汎用的な方法を使いたいのですが、例えば、私のスプリングアプリケーション全体でデータベースがダウンしている場合を具体的に説明します。スタックトレースではなく、きれいなエラーJSONが欲しいです。
コントローラには
@ControllerAdvice
クラスがあり、これはリクエストの途中でデータベースが停止するケースもキャッチします。しかし、これだけではありません。私はまた、カスタム
CorsFilter
エクステンド
OncePerRequestFilter
を呼び出すと
doFilter
を取得します。
CannotGetJdbcConnectionException
で管理されなくなります。
@ControllerAdvice
. ネットでいろいろ読みましたが、さらに混乱するばかりです。
だから、いろいろと疑問があるんです。
-
カスタムフィルタを実装する必要がありますか?私は
ExceptionTranslationFilter
を処理しますが、これはAuthenticationException
またはAccessDeniedException
. -
自分で実装しようと思ったのは
HandlerExceptionResolver
管理するカスタム例外がないのですから、これよりもっと明白な方法があるはずです。また、try/catch を追加してHandlerExceptionResolver
(しかし、これは応答で何も返さず、ステータス200と空のボディを得ます。
何か良い対処法はないでしょうか?ありがとうございます。
どのように解決するのですか?
というわけで、こんな感じです。
フィルターについての基本的なことを読みました ここで そして、フィルターチェーンの最初になるカスタムフィルターを作成し、そこで発生する可能性のあるすべての実行時例外をキャッチするためのトライキャッチを持つ必要があることを理解しました。それから、私は手動でjsonを作成し、それをレスポンスに置く必要があります。
これが私のカスタム・フィルターです。
public class ExceptionHandlerFilter extends OncePerRequestFilter {
@Override
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try {
filterChain.doFilter(request, response);
} catch (RuntimeException e) {
// custom error response class used across my project
ErrorResponse errorResponse = new ErrorResponse(e);
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
response.getWriter().write(convertObjectToJson(errorResponse));
}
}
public String convertObjectToJson(Object object) throws JsonProcessingException {
if (object == null) {
return null;
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(object);
}
}
そして、web.xmlの中の
CorsFilter
. そして、それは動作します
<filter>
<filter-name>exceptionHandlerFilter</filter-name>
<filter-class>xx.xxxxxx.xxxxx.api.controllers.filters.ExceptionHandlerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>exceptionHandlerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
関連
-
エラー java.util.NoSuchElementException
-
java の例外が発生しました java
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
ファインバグタイプ
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
Methodのinvokeメソッド実装のJavaリフレクション
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
自動配線された依存性のインジェクションに失敗しました。
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a