Untitled

 avatar
unknown
java
2 years ago
1.1 kB
5
Indexable
MyEndpoint endpoint = RestClientBuilder.newBuilder()
        .baseUri("http://example.com")
        .build(MyEndpoint.class);

CompletionStage<Response> responseStage = endpoint.getMyResource("value1", "value2");

String missingHeader = "value-from-mobile-app";

BiFunction<Response, Throwable, CompletionStage<Response>> handleStatus = (response, throwable) -> {
    if (response != null && response.getStatus() == 409) {
        MultivaluedMap<String, Object> headers = response.getHeaders();
        if (headers.containsKey("Missing-Header")) {
            headers.add("pin", missingHeader);
            // Call the endpoint again with the missing header
            return endpoint.getMyResource("value1", "value2");
        }
    }
    // Handle other response codes here
    return CompletableFuture.completedFuture(response);
};

responseStage.thenCompose(handleStatus)
        .thenApply(response -> {
            if (response.getStatus() == 200) {
                return response.readEntity(MyResource.class);
            } else {
                throw new MyException("Failed to get resource");
            }
        });
Editor is loading...