web-dev-qa-db-fra.com

@PathParam en option dans Jax-RS

J'ai un service où la dernière partie du chemin est facultative, l'utilisateur peut à la fois entrer / mypath / et / mypath/param1 /.

J'ai essayé d'utiliser une expression régulière pour filtrer la dernière partie du chemin:

@Path("/mypath{param1: (/param1)?}")

J'utilise RestEasy comme fournisseur JAX-RS et le code fonctionne comme prévu dans Tomcat, mais lorsque je le déploie dans JBoss, j'obtiens un code de retour 405 lorsque je ne soumets pas la partie facultative.

Suis-je en train de faire quelque chose de mal ici ou il n'est pas possible d'accomplir cela de manière portable?

37
Fábio

Le problème était le manque d'espace avant le colon:

@Path("/mypath{param1: (/param1)?}")

devrait être:

@Path("/mypath{param1 : (/param1)?}")

Apparemment, c'est un bug, car la spécification rend les espaces autour du deux-points facultatifs. J'ai aussi découvert que je ne suis pas le premier mordu par ce bug .

41
Fábio

Dans mon cas, j'ai dû utiliser cette autre expression:

@Path('/mypath/{param1 : (\\w+)?}')

Sinon, vous devez nettoyer le paramètre.

8
aruizca

Vérifiez s'il existe un chemin déjà défini avec/mypath qui accepte une méthode différente, cela pourrait être la raison pour laquelle vous obtenez 405 (méthode non autorisée). De plus, lorsque vous avez des paramètres facultatifs, je suppose qu'il vaut mieux leur faire des paramètres de requête.

1
Prasanna