2

我正在使用 Jersey 2.0 和 Spring 开发网络服务。

我希望能够将 bean 注入我的方法中。可以使用 获取 Bean 参数@BeanParam。但是,我需要注入一个“动态”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>

4

1 回答 1

0

@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 中。

于 2013-09-06T07:56:20.787 回答