rad*_*dai 14 java jax-rs jersey
假设我有一些jax-rs资源类:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ResourceA {
@GET
public Something get(@Context UriInfo uriInfo) {
if (...) {
//how to get to ResourceB ?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想有条件地将调用重定向到其他一些jax-rs资源:
public class ResourceB {
@GET
@Path("{identifier}")
public Other get(@PathParam("identifier")String someArg) {
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?请注意,我不希望这对客户端可见(因此没有http重定向)和通常我想重定向的资源方法不共享相同的签名(他们可能有路径参数等,如我给出的示例).
我在apache tomcat下运行jersey 2.6(它是一个spring应用程序,如果有任何帮助)
编辑 - 我正在寻找一个jax-rs相当于servlet前进.我不想做额外的http跳或担心我自己实例化资源类
Har*_*rry 14
您可以使用ResourceContext获取它,如下所示:
@Context
ResourceContext resourceContext;
Run Code Online (Sandbox Code Playgroud)
这会将ResourceContext注入您的资源.然后,您可以获得所需的资源:
ResourceB b = resourceContext.getResource(ResourceB.class);
Run Code Online (Sandbox Code Playgroud)
ResourceContext的Javadoc就在这里.你可以在这里找到类似的问题
我不知道有任何可能从资源方法执行此操作,但如果它适合您的用例,您可以做的是在预匹配请求过滤器中实现重定向逻辑,例如:
@Provider
@PreMatching
public class RedirectFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
UriInfo uriInfo = requestContext.getUriInfo();
String prefix = "/redirect";
String path = uriInfo.getRequestUri().getPath();
if (path.startsWith(prefix)) {
String newPath = path.substring(prefix.length());
URI newRequestURI = uriInfo.getBaseUriBuilder().path(newPath).build();
requestContext.setRequestUri(newRequestURI);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在资源方法与请求匹配并执行且没有http重定向或其他内部http请求之前,这将在内部将每个请求重定向/redirect/some/resource到/some/resource(或传递给任何内容requestContext.setRequestUri()).
| 归档时间: |
|
| 查看次数: |
7189 次 |
| 最近记录: |