28 votes

JAX-RS @PathParam Comment passer une corde avec des slashes, hyphens - é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:

  1. Je suis en train d'avoir mon simple webservice comme cette URL http://localhost:8080/SampleJersey/rest/inchi/InChIName

    Le 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 normale de 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?

  2. 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") que ça va marcher?

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

18voto

yegor256 Points 21737

C'est ainsi que vous autorisez les slashes dans les params de chemin :

13voto

simonox Points 218

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

9voto

BalusC Points 498232

Les paramètres doivent être codés url. Vous pouvez `` utiliser pour cela.

Le sera ensuite traduit en .

4voto

J'ai obtenu ce pour travailler en utilisant @QueryParam() plutôt que de @PathParam.

Ainsi, la structure de l'URL serait comme cela http://myrestservice.com/rest/inchi?inchiname=InChIhere

Avec @PathParam j'ai lu dans l'API qu'il n'acceptera pas les slashes. Je me demande si je peux utiliser n'importe quelle expression régulière dans @Path juste pour ignorer toutes les slashes dans la chaîne qui serait entré entre guillemets ".

4voto

AmanicA Points 1996

Ce qui suit devrait fonctionner :

(C'est en quelque sorte mentionné dans une autre réponse et commentaire, je suis juste explicitement le mettre dans une réponse distincte pour le rendre clair)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X