Java >> Java tutorial >  >> Java

Hvordan kan jeg modtage dynamisk antal forespørgselsparametre i Rest Client – ​​Quarkus?

Jeg skal oprette en hvileklient for at få adgang til en URI, der kan modtage 0 eller n forespørgselsparametre.

Eksempel:

https://xpto?page=0&size=10&brand=abc&color=blue or
https://xpto?page=0&size=10&brand=abc or
https://xpto?page=0&size=10 or
https://xpto

hvordan kunne jeg gøre det her?

@RegisterRestClient
  public interface BarService {
  @GET
  @Path("/xpto")
  Response get(@QueryParam ...);
}

Svar

Se venligst Sådan sender du et forespørgselsparameterkort ved hjælp af RESTEasy proxy-klient, lignende problem diskuteres.

Du kan definere din klient på samme måde som nedenfor:

@RegisterRestClient
  public interface BarService {
  @GET
  @Path("/xpto")
  Response get(Map<String, String> queryParamMap);
}

Og du kan definere ClientRequestFilter til at konvertere kortet til forespørgselsparametre:

import java.io.IOException;
import java.util.Map;

import javax.ws.rs.HttpMethod;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.ext.Provider;

@Provider
public class QueryParamBuildingFilter implements ClientRequestFilter {

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        if (requestContext.getEntity() instanceof Map && requestContext.getMethod().equals(HttpMethod.GET)) {
            UriBuilder uriBuilder = UriBuilder.fromUri(requestContext.getUri());
            Map allParam = (Map)requestContext.getEntity();
            for (Object key : allParam.keySet()) {
                uriBuilder.queryParam(key.toString(), allParam.get(key));
            }
            requestContext.setUri(uriBuilder.build());
            requestContext.setEntity(null);
        }
    }

}

Java tag