web-dev-qa-db-fra.com

JAX-RS @PathParam Comment passer une chaîne avec des barres obliques, des tirets et des égaux aussi

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:

  1. 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?

  2. 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;
    }
}
37
Sashi Kiran Challa

Voici comment activer les barres obliques dans les paramètres de chemin:

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

Tomcat n'accepte pas% 2F dans les URL: http://Tomcat.Apache.org/security-6.html . Vous pouvez désactiver ce comportement.

19
simonox

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.

10
BalusC

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)

10
AmanicA

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 "".

3
Sashi Kiran Challa