使用REST重定向URL的最佳方法

时间:2016-04-15 04:14:22

标签: java rest servlets

有人可以建议我使用REST在以下两种方式中重定向URL的最佳方法是:

1. httpResponse.sendRedirect("URL");
2. Response.temporaryRedirect(new URI("path"));

2 个答案:

答案 0 :(得分:10)

有几种类型的重定向

根据RFC 7231,HTTP / 1.1的语义和内容的当前引用,有several types of redirects。他们都是

  
      
  1. 指示资源可能在a处可用的重定向   不同的URI,由Location字段提供,如   状态代码301(永久移动),302(已找到)和307   (临时重定向)。

  2.   
  3. 重定向,提供各种匹配资源的选择   能够表示原始请求目标,如在   300(多项选择)状态代码。

  4.   
  5. 重定向到由位置标识的其他资源   字段,可以表示对请求的间接响应,如   在303(请参阅其他)状态代码中。

  6.   
  7. 重定向到之前缓存的结果,如304(不是     修改)状态代码。

  8.   

正确的一个取决于您的需求。但是,这些是最常见的:

  

6.4.2. 301 Moved Permanently

     

301(永久移动)状态代码表示目标   资源已被分配一个新的永久URI和任何未来   对此资源的引用应该使用其中一个附带的URI。 [...]

  

6.4.4. 303 See Other

     

303(请参阅其他)状态代码表示服务器是   将用户代理重定向到不同的资源,如a所示   Location头字段中的URI,用于提供   对原始请求的间接响应。 [...]

  

6.4.7. 307 Temporary Redirect

     

307(临时重定向)状态代码表示目标   资源临时驻留在不同的URI和用户代理之下   如果它执行自动,则不得更改请求方法   重定向到该URI。 [...]

在JAX-RS中执行重定向

根据您在问题中发布的代码,我相信您使用的是JAX-RS API。如果是这样,您可以执行以下重定向:

URI uri = ...
return Response.status(Status.MOVED_PERMANENTLY).location(uri).build();
URI uri = ...
return Response.seeOther(uri).build();
URI uri = ...
return Response.temporaryRedirect(uri).build();

有关详细信息,Response类文档可能很有用。

使用JAX-RS时可能有用的其他细节

您还可以在REST端点中注入UriInfo

@Context
UriInfo uriInfo;

获取一些有用的信息,例如base URIabsolute path of the request。在构建重定向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();
    }
}

答案 1 :(得分:6)

有许多形式的重定向。 3xx系列HTTP状态代码包含:

  • 301 Moved Permanently
  • 307 Temporary Redirect

这些和其他代码具有不同的语义。哪个是对的,取决于你的情况。资源是否已永久移至新位置?或者重定向只是暂时的?

相关问题