I am new to JAX-RS and I am trying to use Jersey to build a simple RESTful Webservice.
I have 2 questions. Please clarify these:
I am trying to have my simple webservice like this URL
http://localhost:8080/SampleJersey/rest/inchi/InChIName
The InChIName is a string like this
InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2- 5H,1H3,(H,11,12)
. How do I pass this as a@PathParam
, I mean a normal String is working fine but here there are slashes,hyphens, and commas. How do I make it to ignore these. I tried putting it in quotes, but that didnt work. How should I do this?I need to pass that
InChI
to another webservice and that returns an XML as an output and I want to display that XML output as my Webservice's output. If I have@Produces("application/xml")
will it work?
This is my code:
@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;
}
}
This is how you enable slashes in path params:
@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Tomcat does not Accept %2F in URLs: http://tomcat.apache.org/security-6.html. You can turn off this behavior.
The following should work:
@GET
@Path("{inchiname : (.+)?}")
@Produces("application/xml")
public String get3DCoordinates(@PathParam("inchiname")String inchiName) {
(This is sort of mentioned in another answer and comment, I'm just explicitly putting it in a separate answer to make it clear)
The parameters should be URL encoded. You can use java.net.URLEncoder
for this.
String encodedParam = URLEncoder.encode(unencodedParam, "UTF-8");
The /
will then be translated to %2F
.
I got this to work using @QueryParam() rather than @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;
}
}
Thus the URL structure would be like this http://myrestservice.com/rest/inchi?inchiname=InChIhere
With @PathParam I read in the API that it will not accept slashes. I am wondering if I can use any Regular Expression in @Path just to ignore all slashes in the string that would be entered in quotes" ".
精彩评论