我有一个Jersey REST端点,它有一个PathParam,我需要在任何方法继续之前进行验证。下面是一个GET的代码示例,但想象一下,还有一个POST,一个PUT,DELETE等,每个都需要验证路径中的“order_id”。
相反,可以像下面那样,@ PathParam注释应用于如果“order_id”不存在则抛出404的方法。
但是,在调用@GET方法之前发生异常时,抛出Jersey MultiException,第一个是下面的validate方法中的NotFoundException,第二个是“IllegalStateException”,因为无法调用@GET方法
目前,结果是适当的404响应,但我担心这不一致。这是一种可接受的模式吗?是否有引起关注的副作用?
@Path("/orders/{order_id}/items")
public ItemsResource {
@Inject
private OrderService orderService;
private String orderId;
@PathParam("order_id")
private void validateAndSetOrderId(String orderId) {
if (orderService.getOrder(orderId) == null) {
throw new NotFoundException("Order not found.");
}
this.orderId = orderId;
}
@GET
public Response getItems() {
// could validate the order_id here if @PathParam were on the variable
return orderService.getItems(this.orderId);
}
}