我是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.您可以关闭此行为.
这是在路径参数中启用斜杠的方法:
@Path("{inchiname : .+}") public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Tomcat不接受URL中的%2F:http://tomcat.apache.org/security-6.html.您可以关闭此行为.
参数应该是URL编码的.你可以用java.net.URLEncoder
它.
String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");
在/
将被翻译成%2F
.
以下应该有效:
@GET @Path("{inchiname : (.+)?}") @Produces("application/xml") public String get3DCoordinates(@PathParam("inchiname")String inchiName) {
(这是在另一个答案和评论中提到的,我只是明确地将它放在一个单独的答案中,以明确)