java regex jboss jax-rs resteasy

java - Opcional @PathParam en Jax-RS



regex jboss (4)

Tengo un servicio donde la última parte de la ruta es opcional, el usuario puede ingresar / mypath / y / mypath / param1 / .

Traté de usar una expresión regular para filtrar la última parte de la ruta:

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

Estoy usando RestEasy como mi proveedor JAX-RS y el código funciona como se espera en Tomcat, pero cuando lo despliego en JBoss obtengo un código de retorno 405 cuando no envío la pieza opcional.

¿Estoy haciendo algo mal aquí o no es posible lograr esto de manera portátil?


Con Dropwizard 1.0 y Java8 puede usar Opcional

@Path("/news") getLastNews(@QueryParam("topicId") String topicId, @QueryParam("limit") Optional<Integer> limit)

Dará una respuesta a ambos

/news?topicId=123213?limit=200

y

/news?topicId=123213


El problema era la falta de espacios en blanco antes del colon:

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

debiera ser:

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

Aparentemente es un error, porque la specification hace que el espacio en blanco alrededor del colon sea opcional. También descubrí que no soy el primero en ser mordido por este error .


En mi caso, tuve que usar esta otra expresión:

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

De lo contrario, debe limpiar el parámetro.


Verifique si hay una ruta ya definida con / mypath que acepte un método diferente, esta podría ser la razón por la que está obteniendo 405 (Método no permitido). Además, cuando tienes parámetros opcionales, supongo que es mejor hacerles consultar parámetros.