我有一个带有方法自定义(GET)的REST Web服务。
List<Integer> weekDays = Arrays.asList(1, 2, 4, 5, 6);
int[] indices = IntStream.rangeClosed(0, weekDays.size())
.filter(i -> i == 0 || i == weekDays.size() || weekDays.get(i - 1) + 1 != weekDays.get(i))
.toArray();
int longest = IntStream.range(0, indices.length - 1).map(i -> indices[i + 1] - indices[i])
.max().orElseThrow(NoSuchElementException::new);
System.out.println(longest);
正如您所看到的,此方法有一个参数。这是我的自定义对象。
对象UIParameters是根据作为查询字符串给出的参数构建的。
例如。 http://example.com/custom?objectType=article
UIParameters对象将包含一个字段:
@GET
@Path("/custom")
public UIResponse custom(final UIParameters uiParameters){...}
我尝试使用InInterceptor从URL获取此参数,构建UIParameter对象并设置消息内容。不幸的是,它不起作用。 之后,我为UIParameters提供了MessageBodyReader,但它仍然不起作用。
我应该怎样做才能达到这个目标?
由于
更新
在InInterceptor中,我将查询字符串复制到http标头。现在是我的MessageBodyReader中可以访问用户位置参数的URL的一部分。在这里,我可以构建我的对象UIParameters。
一切正常,但我不认为这个解决方案是最好的。
有人知道更好的解决方案吗?
答案 0 :(得分:0)
注释QueryParam("")
允许获取注入的所有查询参数。
您不需要拦截器,这不是推荐的方式。请参阅CXF文档http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Parameterbeans
@GET
@Path("/custom")
public UIResponse custom(@QueryParam("") UIParameters uiParameters)
class UIParameters {
String objectType;
}
如果您想使用查询参数自己构建bean,请使用@Context UriInfo
注释
@GET
@Path("/custom")
public UIResponse custom( @Context UriInfo uriInfo){
MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
new UIParameters().Builder()
.objectType(params.getFirst("type"))
.build();
}