Централизованный способ организации URL в Джерси? - PullRequest
2 голосов
/ 27 мая 2010

Простите, если я задаю очевидный вопрос (может, я где-то пропустил его в документах?), Но кто-нибудь нашел хороший способ организовать свои URL-адреса в Джерси Java Framework?

Я имею в виду организацию их централизованно в исходном коде Java, так что вы можете быть уверены, что нет двух классов, ссылающихся на один и тот же URL.

Например, у django действительно хорошее соответствие на основе регулярных выражений . Я думал сделать что-то вроде перечисления:

enum Urls{
    CARS  ("cars"),
    CAR_INFO ("car", "{info}");

    public Urls(String path, String args) 
    ...
}

но вы можете себе представить, что это быстро выходит из-под контроля, если у вас есть такие URL-адреса, как:

cars/1/wheels/3

где вам нужно чередовать несколько идентификаторов путей друг с другом ...

Какие-нибудь советы?

Ответы [ 2 ]

4 голосов
/ 27 мая 2010

Из моего опыта с Джерси, когда я пытался комментировать два места с одинаковым @Path, у меня были ошибки компиляции, и он не запускался. Это не всегда так, поэтому может помочь следующее:

Вы можете получить файл application.wadl из своего приложения на Джерси, просто запросив его у своего веб-ресурса:

$ curl http://localhost:8080/application.wadl

или если вы префиксили свои веб-сервисы под /ws/

$ curl http://localhost:8080/ws/application.wadl

Файл application.wadl - это XML-файл, который показывает все ваши ресурсы в запущенном приложении, а также методы, которые вы можете вызвать для ресурса. См. следующий ресурс о том, как выложить этот файл.

0 голосов
/ 07 июня 2010

Ну, я полагаю, у вас есть @Path на каждом ресурсе? Это означает, что вам не нужно отслеживать URL-адреса по всему вашему приложению, а только внутри каждого класса - что относительно просто, если вы аннотируете интерфейс.

Использование перечислений не будет работать - вы можете помещать константы только в аннотацию, но использование класса, содержащего конечную статическую строку, может работать.

public class UrlConst {
  public final static RESOURCE_MY_RESOURCE="/resource";
  public final static RESOURCE_MY_RESOURCE2="/resource";
  public final static OP_GET_ALL="/";
  public final static OP_GET_BY_ID="/{id}";
}

@Path(UrlConst.RESOURCE_MY_RESOURCE)
public interface MyResource {

 @GET
 @Path(UrlConst.OP_GET_ALL)
 @Produces(MediaType.APPLICATION_XML)
 public ObjectList getAll();

 @GET
 @Path(UrlConst.OP_GET_BY_ID)
 @Produces(MediaType.APPLICATION_XML)
 public Object get(@PathParam("id") int id);

}

@Path(UrlConst.RESOURCE_MY_RESOURCE2)
public interface MyResource2 {

 @GET
 @Path(UrlConst.OP_GET_ALL)
 @Produces(MediaType.APPLICATION_XML)
 public ObjectList getAll();

 @GET
 @Path(UrlConst.OP_GET_BY_ID)
 @Produces(MediaType.APPLICATION_XML)
 public Object get(@PathParam("id") int id);

}

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...