2016-12-12 3 views
0

J'essaie actuellement d'ajouter une nouvelle fonctionnalité à mon API REST.Java REST Annotation de l'API

Fondamentalement, je veux ajouter la possibilité d'ajouter des paramètres de requête à la fin d'un chemin et transformer cela en une carte de toutes les options de requête par exemple.

mon code actuel me permet de faire des choses comme

localhost:8181/cxf/check/ 
localhost:8181/cxf/check/format 
localhost:8181/cxf/check/a/b 
localhost:8181/cxf/check/format/a/b 

et cela utilisera toutes les @pathparam comme variables de chaîne pour générer une réponse.

Ce que je veux faire maintenant est d'ajouter:

localhost:8181/cxf/check/a/b/?x=abc&y=def&z=ghi&... 
localhost:8181/cxf/check/format/a/b/?x=abc&y=def&z=ghi&... 

et je serais alors cette générer une carte qui peut être utilisé avec le pathparam pour construire la réponse

x => abc 
y => def 
z => ghi 
... => ... 

J'étais penser quelque chose comme ceci [ci-dessous] cependant le @QueryParam semble manipuler seulement une valeur clé et pas une carte d'eux.

@GET 
@Path("/{format}/{part1}/{part2}/{query}") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @QueryParam("query") Map<K,V> query); 

Ci-dessous est mon code d'interface actuel.

@Produces(MediaType.APPLICATION_JSON) 
public interface RestService { 

@GET 
@Path("/") 
Response getCheck(); 

@GET 
@Path("/{format}") 
Response getCheck(@PathParam("format") String format); 

@GET 
@Path("/{part1}/{part2}") 
Response getCheck(@PathParam("part1") String part1,@PathParam("part2") String part2); 

@GET 
@Path("/{format}/{part1}/{part2}") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2); 

} 

Répondre

1

QueryParam("") myBean permet d'obtenir tous les paramètres de requête injectés. Retirez également la dernière partie {query}

@GET 
@Path("/{format}/{part1}/{part2}/") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @QueryParam("") MyBean myBean); 

public class MyBean{ 
    public void setX(String x) {...} 
    public void setY(String y) {...} 
} 

Vous pouvez également ne pas déclarer des paramètres et analyser l'URI. Cette option pourrait être utile si vous pouvez accepter des paramètres non-fixes

@GET 
@Path("/{format}/{part1}/{part2}/") 
public Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @Context UriInfo uriInfo) { 
    MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); 
    String x= params.getFirst("x"); 
    String y= params.getFirst("y"); 
} 
+0

Le @Context est quelque chose que je regardais que je l'aime (comme construire une carte) problème mais j'avais obtenir ce travail (peut-être juste besoin de regarder quelques exemples de plus.) cela me permet d'utiliser @Path ("/ {format}/{part1}/{part2} /") ou bien dois-je le laisser vide puis extraire le chemin plus tard de l'UriInfo? –

+0

Vous pouvez utiliser '@ PathParam' et' @Context UriInfo' ensemble. J'ai inclus l'exemple complet dans la réponse – pedrofb

+0

Merci, je vais tester dès que possible Je vous remercie! –