簡體   English   中英

如何將動態Bean參數注入Jersey方法?

[英]How to inject dynamic Bean parameter into Jersey method?

我正在使用Jersey 2.0和Spring開發一個Web服務。

我希望能夠將bean注入我的方法中。 可以使用@BeanParam獲得Bean參數。 但是,我需要注入“動態” bean。 我需要此bean包含傳遞給該方法的所有查詢參數。

例如,如果我請求GET /posts?title=lorem&date=2011-01-01&tag=game

我有一個像

@Path('/posts')
public class PostService{
    @GET
    public Response getAll(@QueryParam("page") int page,
        @QueryParam("pageSize") int pageSize,
        @BeanParam SearchParameters sp){

        sp.getTitle();
        sp.getDate();
        sp.getTag();
    }
}

我可能更容易獲得查詢參數Map<String, String>

@BeanParam允許將更多的可注入參數放入一個bean(POJO)中,從而使您在資源方法,資源方法構造函數中或資源類中沒有那么多可注入參數。 您可以將它們封裝到注入@BeanParam的bean中。 這處理諸如@ HeaderParam,@ QueryParam之類的參數。 但是您也可以將ContainerRequestContext,UriInfo,SecurityContext或任何其他可注入對象注入到您的bean中。

但是,在這種情況下,您需要使用查詢參數圖,因為您需要所有參數,而不僅需要以前已知的特定參數。 為了獲取它們,您可以注入UriInfo並從中獲取查詢參數:

@GET
public Response get(@Context UriInfo uriInfo) {
    MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
    String myParam = queryParameters.getFirst("myParam");    
    ...
}

或者,您可以使用@BeanParam並將@UriInfo注入到bean中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM