Je suis nouveau sur JAX-RS et j'essaie d'utiliser Jersey pour créer un simple Webservice RESTful.
J'ai 2 questions. Veuillez les clarifier:
J'essaie d'avoir mon simple service Web comme cette URL http://localhost:8080/SampleJersey/rest/inchi/InChIName
InChIName est une chaîne comme celle-ci InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2- 5H,1H3,(H,11,12)
. Comment puis-je passer cela en tant que @PathParam
, Je veux dire qu'une chaîne normale fonctionne bien, mais ici il y a des barres obliques, des tirets et des virgules. Comment puis-je faire pour ignorer ces derniers. J'ai essayé de le mettre entre guillemets, mais cela n'a pas fonctionné. Comment dois-je procéder?
J'ai besoin de transmettre ce InChI
à un autre service Web et qui renvoie un XML en tant que sortie et je veux afficher cette sortie XML en tant que sortie de mon Webservice. Si j'ai @Produces("application/xml")
cela fonctionnera-t-il?
Voici mon code:
@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;
}
}
Voici comment activer les barres obliques dans les paramètres de chemin:
@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Tomcat n'accepte pas% 2F dans les URL: http://Tomcat.Apache.org/security-6.html . Vous pouvez désactiver ce comportement.
Les paramètres doivent être RL encodée . Vous pouvez utiliser Java.net.URLEncoder
pour cela.
String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");
Le /
sera alors traduit en %2F
.
Les éléments suivants devraient fonctionner:
@GET
@Path("{inchiname : (.+)?}")
@Produces("application/xml")
public String get3DCoordinates(@PathParam("inchiname")String inchiName) {
(Ceci est en quelque sorte mentionné dans une autre réponse et commentaire, je le mets simplement explicitement dans une réponse distincte pour le clarifier)
Je l'ai fait fonctionner en utilisant @QueryParam () plutôt que @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;
}
}
Ainsi, la structure de l'URL serait la suivante http://myrestservice.com/rest/inchi?inchiname=InChIhere
Avec @PathParam, j'ai lu dans l'API qu'il n'acceptera pas les barres obliques. Je me demande si je peux utiliser une expression régulière dans @Path juste pour ignorer toutes les barres obliques dans la chaîne qui seraient entrées entre guillemets "".