Jersey Client / JAX-RS et optionnel (pas par défaut) @QueryParam (côté client)
J'ai une API RESTful qui explique qu'un certain requête paramètre est facultatif, et ne fournit pas un argument par défaut. Donc, je peux fournir de la valeur ou de ne pas l'envoyer dans la requête GET en tant que paramètre.
Exemple:
queryA
est nécessairequeryB
est facultatif (peut envoyerGET
sans elle)
Cela devrait fonctionner:
http://www.example.com/service/endpoint?queryA=foo&queryB=bar
Cela devrait aussi fonctionner:
http://www.example.com/service/endpoint?queryA=foo
Comment puis-je faire une interface client pour Jersey-Proxy qui peut le faire?? Je n'ai pas le code côté serveur à l'interface avec donc je suis en utilisant org.glassfish.jersey.client.proxy.WebResourceFactory
via Jersey-Proxy pour générer le client d'interagir avec le serveur de l'API.
De l'échantillon de l'interface:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") String second);
}
Je sais que je peux faire une autre méthode:
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first);
Mais ce qui arrive quand vous avez plusieurs champs optionnels?? Je ne veux pas faire tout son possible mutation de!
source d'informationauteur justderb
Vous devez vous connecter pour publier un commentaire.
L'interface a droit tout au long de
Je ne peux pas croire que c'était facile:
Remarqué quelque chose de différent que les questions d'interface?? Nope. C'est parce que c'est la réponse!
Ne pas utiliser @DefaultValue
Si vous voulez par défaut d'un paramètre à une valeur spécifique, vous utilisez le
@DefaultValue
annotation dans le paramètre:Passer
null
à la@QueryParam
vous ne voulez pasSi vous voulez faire de la
@QueryParam
en option, vous n'appliquez pas la@DefaultValue
annotation. Pour passer une valeur avec le paramètre de requête, il suffit de passer dans la valeur normalement. Si vous souhaitez que le paramètre de requête à pas à tous, il suffit de passernull
!Afin de l'appelant
ServiceInterface.getEndpoint("firstQueryParam", "secondQueryParam");
appels:et de l'appel de
ServiceInterface.getEndpoint("firstQueryParam", null);
appels:Et walla! Pas de second paramètre de requête! 🙂
Vous pouvez injecter une
UriInfo
instance (ou d'autre chose commeHttpServletRequest
) dans votre méthode, et d'obtenir toutes les données que vous voulez hors de lui.Par exemple