Quarkus Microprofile Rest Client ResponseExceptionMapper non rileva gli errori

Oct 06 2020

Ho un Rest Client in un servizio Quarkus (1.8.1) definito in questo modo:

@RegisterRestClient
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {
    @POST
    @Path("/{entity}")
    Response postEntity(@HeaderParam(value = "Authorization") String auth, 
            @PathParam("entity") String entity, Object payload) throws MyException;
}

E ho implementato ResponseExceptionMappernello stesso pacchetto come questo:

public class MyExceptionMapper implements ResponseExceptionMapper<MyException> {
    @Override
    public MyException toThrowable(Response r) {
        return new DynamicsException(r.getStatus() + " - " + r.readEntity(String.class));
    }
}

Quando chiamo il servizio, attualmente restituisce un errore 404 e mi aspettavo che il codice nella MyExceptionMapperclasse venisse chiamato. Tuttavia non lo fa e invece javax.ws.rs.WebApplicationExceptionviene lanciato un. L'analisi dello stack include una chiamata a DefaultResponseExceptionMapper. Sembra che il mio mappatore non sia stato registrato.

Come posso registrare il mio gestore per risposte non valide dalle chiamate al servizio?

Risposte

2 Haroon Oct 06 2020 at 14:02

È necessario registrare MyExceptionMapper come provider per il resto del client con @RegisterProvider(MyExceptionMapper.class).

@RegisterRestClient
@RegisterProvider(MyExceptionMapper.class)
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {