このコードをREST APIリクエストに使用します。
WebClient.Builder builder = WebClient.builder().baseUrl(gatewayUrl);
ClientHttpConnector httpConnector = new ReactorClientHttpConnector(opt -> opt.sslContext(sslContext));
builder.clientConnector(httpConnector);
接続例外ハンドラを追加するにはどうすればよいですか?カスタムロジックを実装したいですか?この機能は簡単に実装できますか?
SSL資格情報が原因で接続が失敗する状況での質問を理解した場合、REST応答で接続例外マニフェスト自体が表示されます。この例外はFlux
結果の取得 _WebClient.ResponseSpec#onStatus
_ 。_#onStatus
_のドキュメントは次のように述べています:
指定された
HttpStatus
述語が適用されたときに呼び出されるカスタムエラー関数を登録します。関数から返された例外は、bodyToMono(Class)
およびbodyToFlux(Class)
から返されます。デフォルトでは、エラーハンドラーは、応答ステータスコードが4xxまたは5xxの場合にWebClientResponseException
をスローするレジスターです。 。
この例 を見てください:
_Mono<Person> result = client.get()
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(HttpStatus::is4xxServerError, response -> ...) // This is in the docs there but is wrong/fatfingered, should be is4xxClientError
.onStatus(HttpStatus::is5xxServerError, response -> ...)
.bodyToMono(Person.class);
_
同様に、質問の場合、呼び出しが行われた後に接続エラーが発生し、リアクティブパイプラインでの伝達方法をカスタマイズできます。
_Mono<Person> result = client.get()
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(HttpStatus::is4xxClientError, response -> {
... Code that looks at the response more closely...
return Mono.error(new MyCustomConnectionException());
})
.bodyToMono(Person.class);
_
お役に立てば幸いです。