java – 如何从ContainerRequestContext获取路径参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何从ContainerRequestContext获取路径参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1385字,纯文字阅读大概需要2分钟。
内容图文
我想为我的REST API端点应用授权过滤器,并且过滤器需要路径参数来进行过滤.这是我的端点和代码:
终点:
curl --url 'localhost:80/reports/resources/org/12345/product/111 ' --request GET --header 'Authorization: <token here>'
资源代码:
@Path("/resources")
public class MyResource extends AbstractResource {
...
@GET
@Path("/org/{orgId}/product/{productId}")
@Produces(MediaType.APPLICATION_JSON)
@RoleAuthenticated
public Response getResourcesReport(@PathParam("orgId") String orgId,
@PathParam("productId") String productId,
@Context HttpHeaders headers){....}
过滤:
@PreMatching
@RoleAuthenticated
public class AuthorizationFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
MultivaluedMap<String, String> pathparam = requestContext.getUriInfo().getPathParameters(); <-- return empty map
}
我期待requestContext.getUriInfo().getPathParameters()返回以下地图:
orgId 12345
productId 111
怎么回来一张空地图?以及如何从ContainerRequestContext获取路径参数?
解决方法:
您在过滤器上使用了@PreMatching注释.
Javadoc说:
In case the filter should be applied at the pre-match extension point,
i.e. before any request matching has been performed by JAX-RS runtime,
the filter MUST be annotated with a @PreMatching annotation.
因此,在传入请求已由JAX-RS运行时与特定资源匹配之前调用过滤器,因此路径参数为空.
所以我想你需要删除@PreMatching注释.
内容总结
以上是互联网集市为您收集整理的java – 如何从ContainerRequestContext获取路径参数全部内容,希望文章能够帮你解决java – 如何从ContainerRequestContext获取路径参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。