2012-01-09 6 views
5

Me gustaría ser capaz de acceder a las siguientes direcciones URL de descanso:¿Jersey admite signo de dólar en Anotación de ruta de JAX-RS?

El primer URL funciona bien. Tengo problemas con la URL $ count usando la implementación de JAX-RS en Jersey.

Aquí está el código para el recurso.

@Path("/helloworld") 
public class HelloWorldResource { 
    @GET 
    @Produces("text/plain") 
    public String getClichedMessage() { 
     return "Hello World!"; 
    } 

    @GET 
    @Path("\\$count") 
    @Produces("text/plain") 
    public String getClichedMessage(
      @PathParam("\\$count") String count) { 

     return "Hello count"; 
    } 
} 

También he intentado "$ recuento", tanto en @Path y @PathParam pero eso tampoco funcionó.

Nota: Si elimino el signo de dólar de todo el código anterior, entonces funciona bien para la URL localhost: 9998/helloworld/count. Sin embargo, necesito que el signo de dólar esté allí en la URL porque esta será una aplicación de productor de OData.

+1

Estoy bastante seguro de que el signo $ tiene un significado semántico dentro de la especificación de codificación URL. No puedo imaginar que pueda usarlo en una URL regular sin codificarla. – Perception

+1

El signo de dólar es legal para usar en una URL sin codificación. Se usa mucho en el Open Data Protocol, que es un protocolo basado en el resto. Ver [enlace] (http://www.odata.org/developers/protocols/uri-conventions) – Jerome

Respuesta

3

encontrado la respuesta. Poner el signo de dólar en una clase de personaje hizo el truco.

@GET 
@Path("{count : [$]count(/)?}") 
@Produces("text/plain") 
public String getClichedMessageCount(
     @PathParam("count") String count) { 

    return "Hello count"; 
} 

Lo anterior coincide con las siguientes URL.

  • localhost: 9998/holamundo/$ contar
  • localhost: 9998/holamundo/$ recuento/
  • localhost: 9998/holamundo/$ contar filtro $ = bla
  • localhost: 9998/holamundo/$ count /? $ filter = blah
+0

¡Muchas gracias! Me he pasado toda la mañana tratando de hacer esto. – Montecarlo

1

signos de dólares son caracteres especiales en las URL, y necesitan ser codificada como tal, me temo:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

El personaje que está buscando es 24%, si está interesado , aunque si estás en Java, leer en la clase java.net.URI puede valer la pena. No he jugado con Jersey, pero Java es más que capaz de hacer el trabajo duro por ti aquí.

+1

La codificación del signo de dólar no es obligatoria. El signo de dólar se identifica como un carácter reservado en URI RFC, RFC 3986 [¹] (http: // tools.ietf.org/html/rfc3986#section-2.2 "RFC 3986 seg. 2.2") porque tiene un significado especial para algunos esquemas de URI específicos (especialmente 'gopher:'). No tiene ningún significado especial en el esquema de URI 'http:'. – MetaEd

+0

Rohaq, creo que MetaEd es correcto. Consulte el [Open Data Protocol] (http://www.odata.org/developers/protocols/uri-conventions) para obtener un protocolo basado en el descanso que hace un uso intensivo de las URL de inicio de sesión de dólar. – Jerome

+0

¡Ah, vale, mi error, entonces! Sin embargo, es probable que valga la pena codificar el URI correctamente para evitar problemas adicionales. – Rohaq

0

Está utilizando la barra mal en el @Path

@GET 
@Path("/$count") 
@Produces("text/plain") 
public String getClichedMessage(
     @PathParam("\\$count") String count) { 

    return "Hello count"; 
} 

también que no es la forma correcta de utilizar PathParam. Si usted está tratando de recuperar el valor después de/holamundo usted debe hacer lo siguiente

@GET 
@Path("/{$count}") 
@Produces("text/plain") 
public String getClichedMessage(
     @PathParam("$count") String count) { 

    return "Hello count"; 
} 

Editar No se pudo conseguir que funcione con un $

@Path("count") // works 
@Path("/count") // works 
@Path("\\count") // does not work 
@Path("$count") // does not work 
@Path("/$count") // does not work 
+0

Hola Michael. Intentó el primer ejemplo de código que sugirió, pero no funcionó. El segundo ejemplo no es aplicable ya que necesito hacer coincidir la cadena literal "$ count". – Jerome

+0

@ Jerome Tiene razón, todavía no funciona después de corregir la barra. –

Cuestiones relacionadas