Add Exception handler for Spring Web Client

假如想象 提交于 2019-12-23 07:59:15

问题


I use this code for REST API requests.

WebClient.Builder builder = WebClient.builder().baseUrl(gatewayUrl);
ClientHttpConnector httpConnector = new ReactorClientHttpConnector(opt -> opt.sslContext(sslContext));
builder.clientConnector(httpConnector);

How I can add connection exception handler? I would like to implement some custom logic? Is this feature easy to implement?


回答1:


If I understand your question in the context of failing the connection because of SSL credentials, then you should see the connection exception manifest itself on the REST response. You can take care of that exception via the Flux result you get on WebClient.ResponseSpec#onStatus. The docs for #onStatus says:

Register a custom error function that gets invoked when the given HttpStatus predicate applies. The exception returned from the function will be returned from bodyToMono(Class) and bodyToFlux(Class). By default, an error handler is register that throws a WebClientResponseException when the response status code is 4xx or 5xx.

Take a look at this example:

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);

Similarly for your question, the connection error should manifest itself after the call gets made and you can customize how it gets propogated in the reactive pipeline:

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);

Hope that helps.



来源:https://stackoverflow.com/questions/51139321/add-exception-handler-for-spring-web-client

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!