use*_*589 5 java rest servlets
任何人都可以建议我在以下两种方式中使用REST重定向URL的最佳方法:
1. httpResponse.sendRedirect("URL");
2. Response.temporaryRedirect(new URI("path"));
Run Code Online (Sandbox Code Playgroud)
cas*_*lin 14
根据RFC 7231,HTTP/1.1的语义和内容的当前参考,有几种类型的重定向.他们都是
重定向指示资源可能在不同的URI处可用,如"位置"字段所提供的,如状态代码
301(永久移动),302(找到)和307(临时重定向).重定向,提供匹配资源的选择,每个都能够表示原始请求目标,如
300(多个选择)状态代码中所示.重定向到由"位置"字段标识的不同资源,该资源可以表示对请求的间接响应,如
303(请参阅其他)状态代码中所示.重定向到先前缓存的结果,如
304(未修改)状态代码中所示.
正确的一个取决于您的需求.但是,这些是最常见的:
该
301(永久移动)状态代码表示目标资源已经被分配了一个新的永久性URI,该资源的任何将来参考应该使用封闭的URI之一.[...]
的
303(见其他)状态代码表示该服务器将用户重定向代理不同的资源,如通过一URI在Location头字段,其旨在提供对原始请求的间接响应中指示.[...]
的
307(临时重定向)状态代码表示该目标资源暂时位于如果它执行一个自动重定向到该URI不同的URI和用户代理必须不改变请求方法.[...]
通过您在问题中发布的代码,我相信您正在使用JAX-RS API.如果是这样,您可以执行以下重定向:
URI uri = ...
return Response.status(Status.MOVED_PERMANENTLY).location(uri).build();
Run Code Online (Sandbox Code Playgroud)
URI uri = ...
return Response.seeOther(uri).build();
Run Code Online (Sandbox Code Playgroud)
URI uri = ...
return Response.temporaryRedirect(uri).build();
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,Response类文档可能很有用.
您还可以UriInfo在REST端点中注入:
@Context
UriInfo uriInfo;
Run Code Online (Sandbox Code Playgroud)
并获取一些有用的信息,例如基URI和请求的绝对路径.在构建重定向URI时非常有用.
具有重定向的资源方法如下:
@Path("/foo")
public class MyEndpoint {
@Context
private UriInfo uriInfo;
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
URI uri = uriInfo.getBaseUriBuilder().path("bar").build();
return Response.temporaryRedirect(uri).build();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21813 次 |
| 最近记录: |