我想在球衣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来实现?

最佳答案

您可以注入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;
  ...
}

关于java - 默认情况下, Jersey 2中@BeanParam的所有属性上的@QueryParam,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23474199/

10-09 03:20