pathparam jax example java rest jersey jax-rs

jax - post rest java



JAX-RS @PathParam Cómo pasar una cadena con barras, guiones y equivalentes también (5)

Así es como habilita barras en parámetros de ruta:

@Path("{inchiname : .+}") public String get3DCoordinates(@PathParam("inchiname")String inchiName)

Soy nuevo en JAX-RS y estoy tratando de usar Jersey para construir un servicio web RESTful simple.

Tengo 2 preguntas Por favor aclare esto:

  1. Estoy tratando de tener mi servicio web simple como esta URL http://localhost:8080/SampleJersey/rest/inchi/InChIName

    InChIName es una cadena como esta InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2- 5H,1H3,(H,11,12) . ¿Cómo paso esto como @PathParam , quiero decir que un String normal está funcionando bien, pero aquí hay barras, guiones y comas. ¿Cómo hago para ignorar esto? Traté de ponerlo entre comillas, pero eso no funcionó. ¿Cómo debería hacer esto?

  2. Necesito pasar ese InChI a otro servicio web y devolver un XML como salida y quiero mostrar ese resultado XML como salida de mi servicio web. Si tengo @Produces("application/xml") , ¿funcionará?

Este es mi código:

@Path("/inchi") public class InChIto3D { @GET @Path("{inchiname}") @Produces("application/xml") public String get3DCoordinates(@PathParam("inchiname")String inchiName) { String ne=""; try{ URL eutilsurl = new URL( "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" + "db=pccompound&term=%22"+inchiName+"%22[inchi]"); BufferedReader in = new BufferedReader( new InputStreamReader(eutilsurl.openStream())); String inputline; while ((inputline=in.readLine())!=null) ne=ne+inputline; }catch (MalformedURLException e1) { }catch (IOException e2){ } return ne; } }


Lo hice funcionar usando @QueryParam () en lugar de @PathParam.

@Path("/inchi") public class InChIto3D { @GET //@Path("{inchiname}") @Produces("application/xml") public String get3DCoordinates(@QueryParam("inchiname") String inchiName) { String ne=""; try{ URL eutilsurl = new URL( "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" + "db=pccompound&term=%22"+inchiName+"%22[inchi]"); BufferedReader in = new BufferedReader( new InputStreamReader(eutilsurl.openStream())); String inputline; while ((inputline=in.readLine())!=null) ne=ne+inputline; }catch (MalformedURLException e1) { }catch (IOException e2){ } return ne; } }

Por lo tanto, la estructura de URL sería así http://myrestservice.com/rest/inchi?inchiname=InChIhere

Con @PathParam, leí en la API que no aceptará barras diagonales. Me pregunto si puedo usar cualquier expresión regular en @Path solo para ignorar todas las barras en la cadena que se ingresarán entre comillas "".


Lo siguiente debería funcionar:

@GET @Path("{inchiname : (.+)?}") @Produces("application/xml") public String get3DCoordinates(@PathParam("inchiname")String inchiName) {

(Esto se menciona en otra respuesta y comentario; simplemente lo expongo explícitamente en una respuesta separada para dejarlo en claro)


Los parámetros deben ser URL codificados . Puede usar java.net.URLEncoder para esto.

String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");

El / se traducirá a %2F .