java framework JAX-RS @PathParam Comment passer une chaîne avec des barres obliques, des tirets et des équivalents



rest web service tutorial java eclipse (4)

JAX-RS est un nouvel utilisateur et j’essaie d’utiliser Jersey pour créer un simple service Web RESTful.

J'ai 2 questions. S'il vous plaît clarifier ces:

  1. J'essaie d'avoir mon service http://localhost:8080/SampleJersey/rest/inchi/InChIName simple 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 comme un @PathParam , je veux dire une chaîne normale fonctionne bien, mais ici, il y a des barres obliques, des tirets et des virgules. Comment puis-je le faire pour les ignorer. J'ai essayé de le mettre entre guillemets, mais cela n'a pas fonctionné. Comment dois-je faire cela?

  2. Je dois transmettre cet InChI à un autre service Web. Ce dernier renvoie un fichier XML en tant que sortie. Je souhaite afficher cette sortie XML en tant que sortie de mon service Web. Si j'ai @Produces("application/xml") ça va marcher?

Ceci 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;
    }
}

Answer #1

Je travaille avec @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 ressemblerait à ceci http://myrestservice.com/rest/inchi?inchiname=InChIhere

Avec @PathParam, j'ai lu dans l'API qu'elle n'accepterait pas les barres obliques. Je me demande si je peux utiliser une expression régulière dans @Path simplement pour ignorer toutes les barres obliques de la chaîne qui seraient entrées entre guillemets "".


Answer #2

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

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

Answer #3

Ce qui suit devrait 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 séparée pour le rendre clair)






jax-rs