我有一个 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);
}
如您所见,有很多参数,其中一些是可选的。
有人告诉我,更好的设计模式是使用参数对象而不是指定这几个参数。
我是 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
}
});
};
有人可以给我举个例子或者给我指出正确的方向/资源吗?
最佳答案
自 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) {
...
}
使用这种方法,您的 Angular 前端界面不需要任何更改。
关于java - 当 REST 端点有太多可选参数时,如何使用参数对象而不是多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41556167/