39

我是 JAX-RS 的新手,我正在尝试使用 Jersey 来构建一个简单的 RESTful Web 服务。

我有 2 个问题。请澄清这些:

  1. 我试图让我的简单网络服务像这个 URLhttp://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. 我需要将它传递InChI给另一个 Web 服务并返回一个 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

我使用@QueryParam() 而不是@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;
    }
}

因此 URL 结构将像这样http://myrestservice.com/rest/inchi?inchiname=InChIhere

使用@PathParam,我在 API 中读到它不接受斜杠。我想知道我是否可以在@Path 中使用任何正则表达式来忽略字符串中将在引号中输入的所有斜杠“”。

于 2010-02-24T00:02:51.130 回答