RESTEasy 中的 InternalDispatcher 可以将一个请求 Forward 给另一个请求,通过这种方法可以实现API的迁移,在保留原URL服务的基础上,将服务迁至另一URL,本文给出一个
例子:
假设我们想将用户的请求从:
http://0.0.0.0/users/forwards/{name}
转向至:
http://0.0.0.0/users/{name}
可在代码中使用InternalDispatcher来实现:
package org.bluedash.resteasy.interceptors;
import java.net.URI;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.ext.RuntimeDelegate;
import org.jboss.resteasy.spi.InternalDispatcher;
@Path("/users")
public class UserServlet {
@Path("{name}")
@GET
@Produces("text/plain")
public String getUsers(@PathParam("name") String name) {
UriBuilder.fromUri(URI.create("http://localhost"));
System.out.println(RuntimeDelegate.getInstance());
return "User: " + name;
}
@Path("forwards/{name}")
@GET
@Produces("text/plain")
public String getMockedUsers(@PathParam("name") String name,
@Context InternalDispatcher dispatcher) {
return (String) dispatcher.getEntity("/users/" + name);
}
}
这样,当用户访问/users/fowards/{name}时,InternalDispatcher 会将请求转至 /users/{name}所对应的代码来处理。