JAX-RS @PathParam如何传递带斜杠,连字符和字符串的字符串。也等于

时间:2010-02-18 19:09:34

标签: java rest jersey jax-rs

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

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

  1. 我正在尝试使用此网址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. 我需要将InChI传递给另一个webservice,并返回一个XML作为输出,我想将该XML输出显示为我的Webservice输出。如果我@Produces("application/xml")会有效吗?

  3. 这是我的代码:

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

5 个答案:

答案 0 :(得分:36)

这是在路径参数中启用斜杠的方法:

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

答案 1 :(得分:19)

Tomcat不接受网址中的%2F:http://tomcat.apache.org/security-6.html。您可以关闭此行为。

答案 2 :(得分:10)

参数应为URL encoded。您可以使用java.net.URLEncoder

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

/将被翻译为%2F

答案 3 :(得分:10)

以下内容应该有效:

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

(这是在另一个答案和评论中提到的,我只是明确地将它放在一个单独的答案中以明确说明)

答案 4 :(得分: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;
    }
}

因此,网址结构就像这个http://myrestservice.com/rest/inchi?inchiname=InChIhere

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