2017-01-09 4 views
0

У меня есть конечная точка REST, как показано ниже.Как использовать объект param вместо нескольких параметров, когда слишком много дополнительных параметров для конечной точки REST

@Path("/api/observers") 
public interface MyServiceEndpoint { 

    @GET 
    @Path("/history") 
    HistoryPage<Action> getObserverHistory(@QueryParam("pageNum") @DefaultValue("1") int pageNum, 
              @QueryParam("pageSize") @DefaultValue("25") int pageSize, 
              @QueryParam("methodName") String methodName, 
              @QueryParam("dateBefore") String dateBefore, 
              @QueryParam("dateAfter") String dateAfter, 
              @QueryParam("actionUUID") String actionUUID, 
              @QueryParam("supersededByUUID") String supersededByUUID, 
              @QueryParam("eventUUID") String eventUUID, 
              @QueryParam("wasSuccessful") Boolean wasSuccessful); 

} 

Как вы можете видеть, существует много параметров, и некоторые из них будут необязательными. Мне сказали, что лучшим шаблоном проектирования будет использование объекта param вместо указания этих нескольких параметров. Я новичок в REST, и я понятия не имею, что это значит и как это сделать.
Я также хочу знать, как это будет сделано, как это использовать из службы AngularJS? Сейчас я потребляя эту существующую конечную точку, как:

myService.toggleEnabled = function (observer) { 
      return $http({ 
       method: 'PUT', 
       url: 'api/observers/history', 
       headers: { 
        'Accept': mimeType, 
        'Content-Type': mimeType 
       }, 
       params : { 
        pageNum: 1, 
        pageSize: 5 
       } 
      }); 
     }; 

Может кто-нибудь дать мне пример для этого или мне точку в правильном направлении/ресурсов?

+0

Чтение JAX-RS док https://jersey.java.net/apidocs-javax.jax-rs/2.0.1/javax/ws/rs/BeanParam.html – Chandu

ответ

2

Поскольку JAX-RS 2.0, @BeanParam был введен как агрегатор параметров. Вам просто нужно определить простой класс POJO со всеми параметрами запроса в виде полей:

public class ObserverHistoryParams { 
    @QueryParam("pageNum") @DefaultValue("1") 
    private int pageNum; 

    @QueryParam("pageSize") @DefaultValue("25") 
    private int pageSize; 

    // other params & getters & setters 
} 

getObserverHistory Затем измените метод подпись:

HistoryPage<Action> getObserverHistory(@BeanParam ObserverHistoryParams params) { 
    ... 
} 

Используя этот подход, ваш Угловая интерфейс интерфейс не нуждается в какой-либо изменение.

Смежные вопросы