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

2022-09-01 02:59:43

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

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

  1. 我正在尝试使用像这样的简单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 服务,该 Web 服务返回一个 XML 作为输出,并且我想将该 XML 输出显示为我的 Web 服务的输出。如果我有,它会工作吗?InChI@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;
    }
}

答案 1

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

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

答案 2

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