use*_*423 5 java servlets http jax-rs forward
我想将REST请求转发到另一台服务器。
我将JAX-RS与Jersey和Tomcat一起使用。我尝试通过设置See Other响应和添加Location标题来进行尝试,但这并不是真正的前进。
如果我使用:
request.getRequestDispatcher(url).forward(request, response);
Run Code Online (Sandbox Code Playgroud)
我得到:
java.lang.StackOverflowError:如果网址是相对路径java.lang.IllegalArgumentException:路径http://website.com不能以/字符开头(我认为转发仅在同一servlet上下文中是合法的)。如何转发请求?
将RequestDispatcher允许您从一个servlet的请求转发到其他资源在同一台服务器上。有关更多详细信息,请参见此答案。
您可以使用JAX-RS客户端API,并使您的资源类充当代理,以将请求转发到远程服务器:
@Path("/foo")
public class FooResource {
private Client client;
@PostConstruct
public void init() {
this.client = ClientBuilder.newClient();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
String entity = client.target("http://example.org")
.path("foo").request()
.post(Entity.json(null), String.class);
return Response.ok(entity).build();
}
@PreDestroy
public void destroy() {
this.client.close();
}
}
Run Code Online (Sandbox Code Playgroud)
如果重定向适合您,则可以使用ResponseAPI:
Response.seeOther(URI):用于POST后重定向(又名POST / redirect / GET)模式。Response.temporaryRedirect(URI):用于临时重定向。参见示例:
@Path("/foo")
public class FooResource {
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
URI uri = // Create your URI
return Response.temporaryRedirect(uri).build();
}
}
Run Code Online (Sandbox Code Playgroud)
值得一提的是,UriInfo可以将其注入资源类或方法中以获得一些有用的信息,例如基本URI和请求的绝对路径。
@Context
UriInfo uriInfo;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |