39

私はJAX-RSを初めて使用し、Jerseyを使用して単純なRESTfulWebサービスを構築しようとしています。

2つの質問があります。これらを明確にしてください:

  1. このURLのような単純なWebサービスを使用しようとしていますhttp://localhost:8080/SampleJersey/rest/inchi/InChIName

    InChINameは、このような文字列InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2- 5H,1H3,(H,11,12)です。これをとして渡すにはどうすればよいですか。@PathParam通常の文字列は正常に機能していますが、ここにはスラッシュ、ハイフン、およびコンマがあります。これらを無視するにはどうすればよいですか。引用符で囲んでみましたが、うまくいきませんでした。これはどのようにすればよいですか?

  2. これを別のWebサービスに渡す必要がありInChI、XMLを出力として返し、そのXML出力をWebサービスの出力として表示したいと思います。私が持っている場合@Produces("application/xml")、それは機能しますか?

これは私のコードです:

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

5 に答える 5

40

これは、パス パラメータでスラッシュを有効にする方法です。

@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName) 
于 2012-10-24T17:37:01.190 に答える
19

TomcatはURLの%2Fを受け入れません:http://tomcat.apache.org/security-6.html。この動作をオフにすることができます。

于 2010-09-28T07:42:41.317 に答える
12

以下が機能するはずです。

@GET
@Path("{inchiname : (.+)?}")
@Produces("application/xml")
public String get3DCoordinates(@PathParam("inchiname")String inchiName) {

(これは別の回答とコメントで言及されているようなものです。明確にするために、別の回答に明示的に入れています)

于 2014-05-05T22:11:33.367 に答える
10

パラメータはURL エンコードする必要があります。これに使えますjava.net.URLEncoder

String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");

/に変換され%2Fます。

于 2010-02-20T04:10:16.120 に答える
3

@PathParam ではなく @QueryParam() を使用してこれを機能させました。

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

したがって、URL 構造は次のようになりますhttp://myrestservice.com/rest/inchi?inchiname=InChIhere

@PathParam を使用して、スラッシュを受け入れないことを API で読みました。@Path で任意の正規表現を使用して、引用符で囲まれた文字列内のすべてのスラッシュを無視できるかどうか疑問に思っています" "。

于 2010-02-24T00:02:51.130 に答える