web-dev-qa-db-fra.com

Comment créer REST API avec des paramètres facultatifs?

J'ai besoin d'implémenter une API avec ces paramètres de chemin.

@Path("/job/{param1}/{optional1}/{optional2}/{param2}")

Les deuxième et troisième paramètres peuvent-ils être facultatifs? Ainsi, le client n'a pas besoin de les passer, mais doit passer le premier et le dernier.

Si cela n'est pas possible, est-il recommandé de réorganiser les paramètres de cette manière?

@Path("/job/{param1}/{param2}/{optional1}/{optional2}")

Comment fournir les paramètres optionnels?

10
mbgsuirp

Vous pouvez faire correspondre le chemin complet se terminant par la demande REST

@Path("/location/{locationId}{path:.*}")
public Response getLocation(
    @PathParam("locationId") int locationId,
    @PathParam("path") String path) {
    //your code
}

La variable path contient maintenant le chemin complet après location/{locationId}

Vous pouvez également utiliser une expression régulière pour rendre le chemin facultatif.

@Path("/user/{id}{format:(/format/[^/]+?)?}{encoding:(/encoding/[^/]+?)?}")
public Response getUser(
    @PathParam("id") int id,
    @PathParam("format") String format,
    @PathParam("encoding") String encoding) {
    //your code
}

Maintenant, si vous formatez et encodez sera facultatif. Si vous ne donnez aucune valeur, ils seront vides.

3
Emdadul Sawon

Il peut être plus facile de transformer les paramètres de chemin facultatifs en paramètres de requête. Vous pouvez ensuite utiliser @DefaultValue si tu en as besoin:

@GET @Path("/job/{param1}/{param2}")
public Response method(@PathParam("param1") String param1,
    @PathParam("param2") String param2,
    @QueryParam("optional1") String optional1,
    @QueryParam("optional2") @DefaultValue("default") String optional2) {
  ...
}

Vous pouvez ensuite l'appeler à l'aide de /job/one/two?optional1=test en ne transmettant que les paramètres optionnels dont vous avez besoin.

16
Jorn

Réorganisez les paramètres et essayez ce qui suit:

@Path("/job/{param1}/{param2}{optional1 : (/optional1)?}{optional2 : (/optional2)?}")
public Response myMethod(@PathParam("param1") String param1,
                         @PathParam("param2") String param2,
                         @PathParam("optional1") String optional1,
                         @PathParam("optional2") String optional2) {
    ...
}
1
cassiomolin