JAX-RS @PathParam Comment passer une Chaîne de caractères avec des barres obliques, des traits d'union & égale trop
Je suis nouveau sur JAX-RS et je suis en train d'utiliser Jersey construire un simple Service web RESTful.
J'ai 2 questions. Veuillez préciser ces:
-
Je suis en train d'avoir mon simple webservice comme cette URL
http://localhost:8080/SampleJersey/rest/inchi/InChIName
La InChIName est une chaîne de caractères comme ceci
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 comme un@PathParam
, je veux dire normal Chaîne fonctionne bien, mais ici il y a des barres obliques,des tirets et des virgules. Comment puis-je faire pour les ignorer. J'ai essayé de le mettre entre guillemets, mais qui n'a pas fonctionné. Comment dois-je faire cela? -
J'ai besoin de passer que
InChI
à un autre webservice et qui renvoie un document XML comme une sortie et que je veux afficher que XML de sortie comme mon Webservice de sortie. Si j'ai@Produces("application/xml")
ça va fonctionner?
C'est 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;
}
}
Vous devez vous connecter pour publier un commentaire.
C'est une façon de permettre à des barres obliques dans le chemin d'accès params:
Tomcat n'Accepte %2F dans les Url: http://tomcat.apache.org/security-6.html. Vous pouvez désactiver ce comportement.
Les paramètres doivent être URL encodé. Vous pouvez utiliser
java.net.URLEncoder
pour cela.La
/
sera ensuite traduit de%2F
.=
est un caractère réservé et il sera encodé à%3D
. Aussi, c'est un peu d'effort pour faire unSystem.out.println(URLEncoder.encode("=", "UTF-8"));
dans une application de test avec unmain()
😉/
) et l'espace (") ?
URLEncoder.encode("b/1", "UTF-8")` résultats dansa+b%2F1
ce qui est correct pour une requête param mais pour le chemin param j'attendaisa%20b%2F1
.La suivante devrait fonctionner:
(C'est mentionné dans une autre réponse et commentaire, je suis juste explicitement de le mettre dans une autre réponse à préciser)
J'ai eu ce travail à l'aide de @QueryParam() plutôt que @PathParam.
Ainsi, la structure de l'URL serait comme cette http://myrestservice.com/rest/inchi?inchiname=InChIhere
Avec @PathParam j'ai lu dans l'API qu'il n'acceptera pas de barres obliques. Je me demandais si je peux utiliser toute Expression Régulière dans @Path ignorer toutes les barres obliques dans la chaîne de caractères qui doit être entré dans des guillemets" ".