当前位置:  开发笔记 > 编程语言 > 正文

JAX-RS @PathParam如何使用斜杠,连字符和等号传递字符串

如何解决《JAX-RS@PathParam如何使用斜杠,连字符和等号传递字符串》经验,为你挑选了4个好方法。

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

我有两个问题.请澄清这些:

    我想尝试像这个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,我的意思是一个普通的字符串工作正常,但这里有斜杠,连字符和逗号.如何让它忽略这些.我试着把它放在引号中,但那不起作用.我该怎么做?

    我需要将它传递InChI给另一个webservice并返回一个XML作为输出,我想将该XML输出显示为我的Webservice的输出.如果我有@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;
    }
}

yegor256.. 37

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

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

谢谢yegor - 我使用了这种正则表达式定义方法,但发现它只能通过@Path param(而不是@PathParam)工作.@Path("{inchiname:.+}"); [via jersey2] (2认同)


simonox.. 19

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



1> yegor256..:

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

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


谢谢yegor - 我使用了这种正则表达式定义方法,但发现它只能通过@Path param(而不是@PathParam)工作.@Path("{inchiname:.+}"); [via jersey2]

2> simonox..:

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



3> BalusC..:

参数应该是URL编码的.你可以用java.net.URLEncoder它.

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

/将被翻译成%2F.


谢谢Balus.我还是错过了什么.如果我在REST URL中提供以下内容http:// localhost:8080/SampleJersey/rest/inchi /"hello-there"evrything编码正常.但是,如果我在这里引入斜杠,http:// localhost:8080/SampleJersey/rest/inchi /"hello/there"我得到资源未找到错误.我如何获得这里编码的斜杠,如果我想在不编码的情况下直接编码,我该怎么办?

4> AmanicA..:

以下应该有效:

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

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

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有