3

I have a product REST API I need to use that returns things like:
HTTP 200 OK
{ "return_code": "failure_x" }

I cannot change that but I need to keep my project sane.

Is there a Quarkus REST Client Response Interceptor I can use?
It seems to me the interceptors are for my controllers and not for my clients.

I want to intercept the response and modify it to the the proper HTTP code and then process it.

Mashimom
  • 447
  • 1
  • 7
  • 18
  • 1
    Yes there are rest-client interceptors https://quarkus.io/guides/rest-client#rest-client-and-resteasy-interactions – Javier Toja Jul 28 '21 at 11:04
  • 2
    I think that its even possible to use Response filters https://download.eclipse.org/microprofile/microprofile-rest-client-2.0/microprofile-rest-client-spec-2.0.html#_clientresponsefilter – Javier Toja Jul 28 '21 at 11:06

1 Answers1

3

As karelss pointed out in the comments, you can create a ClientResponseFilter to do what you want.

Such a filter can be registered by:

  • @RegisterProvider(MyFilter.class) on your JAX-RS interface
  • in application.properties with:
com.example.MyInterface/mp-rest/providers=com.example.MyFilter

Another option is to create a custom ResponseExceptionMapper. You register it in the same way as the filter. This is how an example exception mapper looks like:

package io.quarkus.rest.client.reactive.runtime;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper;

public class DefaultMicroprofileRestClientExceptionMapper implements ResponseExceptionMapper {

    public Throwable toThrowable(Response response) {
        try {
            response.bufferEntity();
        } catch (Exception var3) {
        }

        return new WebApplicationException("Unknown error, status code " + response.getStatus(), response);
    }

    public boolean handles(int status, MultivaluedMap headers) {
        return status >= 400;
    }

    public int getPriority() {
        return 5000;
    }
}

For more info on exception mappers, take a look at the MicroProfile Rest Client specification: https://download.eclipse.org/microprofile/microprofile-rest-client-2.0/microprofile-rest-client-spec-2.0.html#_responseexceptionmapper