Ответ 1
Так вы включаете косые черты в параметрах пути:
@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Я новичок в JAX-RS, и я пытаюсь использовать Джерси для создания простого веб-сервиса RESTful.
У меня есть 2 вопроса. Просьба прояснить их:
Я пытаюсь использовать свой простой веб-сервис, как этот URL 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
, я имею в виду, что нормальная String работает нормально, но здесь есть слэши, дефисы и запятые. Как я могу заставить их игнорировать их. Я попытался положить его в кавычки, но это не сработало. Как мне это сделать?
Мне нужно передать этот InChI
в другой веб-сервис и который возвращает 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;
}
}
Так вы включаете косые черты в параметрах пути:
@Path("{inchiname : .+}")
public String get3DCoordinates(@PathParam("inchiname")String inchiName)
Tomcat не принимает% 2F в URL-адресах: 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) {
(Это как-то упоминается в другом ответе и комментарии, я просто явно помещаю его в отдельный ответ, чтобы он дал понять)
Я получил это для работы с использованием @QueryParam(), а не @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;
}
}
Таким образом, структура URL будет выглядеть следующим образом http://myrestservice.com/rest/inchi?inchiname=InChIhere
С @PathParam я прочитал в API, что он не примет косые черты. Мне интересно, могу ли я использовать любое регулярное выражение в @Path, чтобы игнорировать все слэши в строке, которые будут введены в кавычки "".
Вы должны иметь возможность использовать дефис. Не уверен, как избежать косой черты.