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:
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?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
.
Tomcat no acepta% 2F en las URL: http://tomcat.apache.org/security-6.html . Puedes desactivar este comportamiento.