Sas*_*lla 37 java rest jax-rs jersey
我是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;
}
}
Run Code Online (Sandbox Code Playgroud)
yeg*_*256 37
这是在路径参数中启用斜杠的方法:
@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 10
参数应该是URL编码的.你可以用java.net.URLEncoder它.
String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
在/将被翻译成%2F.
Ama*_*icA 10
以下应该有效:
@GET
@Path("{inchiname : (.+)?}")
@Produces("application/xml")
public String get3DCoordinates(@PathParam("inchiname")String inchiName) {
Run Code Online (Sandbox Code Playgroud)
(这是在另一个答案和评论中提到的,我只是明确地将它放在一个单独的答案中,以明确)
| 归档时间: |
|
| 查看次数: |
49979 次 |
| 最近记录: |