JAX-RS @PathParam, Как передать Строку с наклонными чертами, дефисами и равняется также

Я плохо знаком с JAX-RS, и я пытаюсь использовать Джерси для создания простого УСПОКОИТЕЛЬНОГО Веб-сервиса.

У меня есть 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). Как я передаю это как a @PathParam, Я подразумеваю, что нормальная Строка хорошо работает, но здесь существуют наклонные черты, дефисы и запятые. Как делают я добираюсь, игнорируют их. Я пытался поместить его в кавычки, но это не работало. Как я должен сделать это?

  2. Я должен передать это InChI к другому веб-сервису и это возвращает XML как вывод, и я хочу отобразить это вывод XML как вывод моего Веб-сервиса. Если я имею @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;
    }
}
37
задан Mark Elliot 20 February 2010 в 04:18
поделиться

2 ответа

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

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

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

10
ответ дан 27 November 2019 в 04:30
поделиться

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

3
ответ дан 27 November 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: