将多个@QueryParam 映射到一个自定义实体

Map several @QueryParam to one custom entity

比如我有class

class MyQuery {
   Date start;
   Date end;
   ChronoUnit scale; // ChronoUnit is enum
}

我想声明这样的方法:

@Path("/myreport")
public Response generateReport(@EntityFromQuery MyQuery query) {
   // logic to generate.
}

并且我希望当有东西被击中时调用这个方法url

/myreport?start=2015-01-01&end=2015-01-31&scale=WEEKS

我正在使用泽西岛。是否有任何内部工具可以实现这一目标? 或者我需要编写自己的 MessageBodyReader?

球衣开箱即用(您可能想先查看一些教程..)。将传入请求的所有 GET 参数作为字符串接受并在稍后转换它们可能更容易:

@GET
@Path("/myreport")
@Produces(MediaType.{whatever you want to return})
public Response generateReport(@QueryParam("start") String start, @QueryParam ("end") String end, @QueryParam ("scale") String scale) {
   // convert from string to date and from string to chroneUnit
   //do some logic..
}

您可以在 JAX-RS 资源的 Java 方法中查看 @BeanParam 注释,而不是 @EntityFromQuery

在你的 MyQuery class 中,你只需要用 @QueryParam("start") 等注释 getters

https://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/BeanParam.html

HTH.