JAX-RS @PathParam Как передать строку с косой чертой, дефисом и равно - PullRequest
37 голосов
/ 18 февраля 2010

Я новичок в JAX-RS и пытаюсь использовать Джерси для создания простого веб-сервиса RESTful.

У меня есть 2 вопроса. Пожалуйста, уточните это:

  1. Я пытаюсь использовать мой простой веб-сервис, такой как этот 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, я имею в виду, что нормальная строка работает нормально, но здесь есть косые черты, дефисы и запятые. Как мне сделать это, чтобы игнорировать это. Я пытался поместить это в кавычки, но это не сработало. Как мне это сделать?

  2. Мне нужно передать этот InChI другому веб-сервису, который возвращает XML в качестве вывода, и я хочу отобразить этот вывод XML в качестве вывода моего Web-сервиса. Если у меня будет @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;
    }
}

Ответы [ 5 ]

36 голосов
/ 24 октября 2012

Вот как вы включаете косую черту в параметрах пути:

19 голосов
/ 28 сентября 2010

Tomcat не принимает% 2F в URL: http://tomcat.apache.org/security-6.html. Вы можете отключить это поведение.

10 голосов
/ 06 мая 2014

Должно работать следующее:

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

(Это как-то упоминается в другом ответе и комментарии, я просто явно выделю его в отдельный ответ, чтобы прояснить его)

10 голосов
/ 20 февраля 2010

Параметры должны быть URL в кодировке . Для этого вы можете использовать java.net.URLEncoder.

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

/ будет затем переведено на %2F.

3 голосов
/ 24 февраля 2010

Я получил это для работы, используя @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, чтобы игнорировать все косые черты в строке, которые будут введены в кавычки "".

...