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?
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.
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.
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) {
...
}