[解決済み] Spring Resttemplateの例外処理
2022-05-01 19:40:37
質問
基本的に、私はエラーコードが200以外の場合に例外を伝播させようとしています。
ResponseEntity<Object> response = restTemplate.exchange(url.toString().replace("{version}", version),
HttpMethod.POST, entity, Object.class);
if(response.getStatusCode().value()!= 200){
logger.debug("Encountered Error while Calling API");
throw new ApplicationException();
}
しかし、サーバーから500の応答があった場合、次のような例外が発生します。
org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) ~[spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
残りのテンプレート交換メソッドをtryで包む必要が本当にあるのでしょうか?そうすると、コードの目的は何でしょうか?
解決方法は?
を実装したクラスを作りたい。
ResponseErrorHandler
を作成し、そのインスタンスを使用して、レストテンプレートのエラー処理を設定します。
public class MyErrorHandler implements ResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
// your error handling here
}
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
...
}
}
[...]
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new MyErrorHandler());
}
また、Springにはクラス
DefaultResponseErrorHandler
をオーバーライドしたいだけなら、 インターフェイスを実装する代わりにそれを拡張することができます。
handleError
メソッドを使用します。
public class MyErrorHandler extends DefaultResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
// your error handling here
}
}
その ソースコード を使うと、SpringがHTTPエラーをどのように処理するのかがわかります。
関連
-
[解決済み] ResourceBundleViewResolverでviews.propertiesが必要な理由
-
Spring エラー: java.lang.IllegalStateException: ApplicationContextのロードに失敗しました
-
[解決済み] WebApplicationContext が見つかりません: ContextLoaderListener が登録されていませんか?
-
[解決済み] Pythonの関数が例外を投げるかどうかをテストするにはどうすればよいですか?
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
-
[解決済み] Node.jsの例外処理のベストプラクティス
-
[解決済み] Spring RestTemplateのパラメータ付きGET
-
[解決済み】Spring RestTemplateリクエストに "Accept: "ヘッダーを設定する方法は?
-
[解決済み] Spring Resttemplateの例外処理
-
[解決済み] Spring Boot RESTサービスの例外処理
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] org.springframework.web.servlet.PageNotFound noHandlerFound URIを持つHTTPリクエストのマッピングが見つからない。
-
[解決済み] ユニットテストから ApplicationContext を読み込むのに失敗しました。FileNotFound
-
[解決済み] Spring Batchのステップスコープの仕組み
-
[解決済み] ApplicationContextException: ServletWebServerApplicationContext が見つからないため、ServletWebServerFactory ビーンを起動できません。
-
SpringプロジェクトがファイルapplicationContext.xmlを解決できないエラー
-
FunctionService' タイプのビーンが見つかりませんでした。
-
SpringトランザクションとMySQLトランザクション詳細インタビュー
-
[解決済み] java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log
-
[解決済み] Spring.jpa.hibernate.ddl-autoプロパティは、Springで具体的にどのように動作しますか?
-
[解決済み] Spring RestTemplateでフォームデータをPOSTする方法は?