@QueryParam默认情况下在泽西2的@BeanParam的所有属性上

时间:2014-05-05 13:51:22

标签: java jax-rs jersey-2.0

我想在球衣2中使用POJO @BeanParam

public class GetCompaniesRequest {

    /**  */
    private static final long serialVersionUID = -3264610327213829140L;

    private Long id;
    private String name;
    ...//other parameters and getters/setters
}

@Path("/company")
public class CompanyResource {

    @GET
    public Response getCompanies(
                    @BeanParam final GetCompaniesRequest rq) {
        ...
    }
}

GetCompaniesRequest中有许多属性,我希望所有这些属性都可用@QueryParameter。我可以在不将@QueryParam放在每个属性上的情况下实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

您可以注入UriInfo并将其中的所有请求参数检索到Map

这样可以避免使用@QueryParam注释注入多个查询参数。

@GET
public Response getCompanies(@Context UriInfo uris) 
{
  MultivaluedMap<String, String> allQueryParams = uris.getQueryParameters();
  //Retrieve the id
  long id = Long.parseLong(allQueryParams.getFirst("id"));
  //Retrieve the name
  String name = allQueryParams.getFirst("name");
  //Keep retrieving other properties...
}

否则,如果您仍需要使用@BeanParam,则必须使用GetCompaniesRequest@QueryParam中注释每个媒体资源:

public class GetCompaniesRequest implements MessageBody 
{
  @QueryParam("id")
  private Long id;
  @QueryParam("name")
  private String name;
  ...
}