私は、Spring MVCベースのWebサイトを使用して、ユーザーを認証します。サードパーティのAPI(すべてのアプリケーション用のコアユーザーデータベースと通信する)を呼び出す必要があります。 私はこれをうまくやり遂げることができます。何らかの理由でThirdParty APIがダウンしている場合、訪問者がログインまたはサインアップしようとするたびに私のウェブサイトの爆弾も消えてしまいます。スプリングリモート認証中にダウンタイムのシナリオを処理するにはどうすればいいですか?
私はこのようなリモートAPI呼び出しています:ここで
ResponseEntity<LoginApiResponse> responseEntity = restTemplate.exchange(uri, HttpMethod.POST, request, LoginApiResponse.class);
を、LoginApiResponse.classはUserDetailsとそこからの応答が含まれている場合がありますことを、他の情報が含まれていBeanです。
ビーンはおおよそ次のようになります。
public class LoginApiResponse {
private HttpStatus status;
private String message;
private String responseStatus;
private UserModel userModel;
... ...
}
私は自分のサイト上でエラーを処理CustomRestResponseErrorHandlerを持っています。 しかし、サードパーティのサイトがダウンしている場合、メンテナンスページはどのような種類の要求でも返されるように設定されているため、返信のタイプはtext/html
で、返答のステータスは200 OK
となります。したがって、ここで例外が発生することはなく、私のCustomRestResponseErrorHandler
は機能しません。むしろ、text/html
タイプの応答をLoginApiResponse
にコールごとに変換できないときにコードが爆発します。
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.habba.web.rest.registration.LoginApiResponse] and content type [text/html]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:811)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:795)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:574)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:547)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:468)
これを回避し、ThirdPartyApiの使用不可能性を早期に判断するにはどうすればよいですか?
与えられたアプローチは私にとってもうまくいきません。同じエラーが表示されます。適切なHttpMessageConverterが見つかりません。 String型を使って試してみましたが、それは私の望むものではありません。 –