【问题标题】:How to inject dynamic Bean parameter into Jersey method?如何将动态 Bean 参数注入 Jersey 方法?
【发布时间】:2013-09-03 08:36:44
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: java spring jersey jax-rs jersey-2.0


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我对将 UriInfo 注入 Bean 更感兴趣。是否可以将 UriInto 注入 bean 的构造函数而不是字段?
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 2013-04-05
    • 2014-06-27
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2017-02-27
    • 2012-07-23
    相关资源
    最近更新 更多