簡體   English   中英

從 JAX-RS 服務發送重定向

[英]Send redirect from a JAX-RS service

是否可以將 JAX-RS Web 服務重定向到另一個網頁?

就像您對 Servlet response.sendRedirect("http://test/test.html")

JAX-RS Web 服務本身應該重定向。 如果相關,我正在使用 RESTEasy。

是的,如果您的返回類型是Response (或HttpServletResponse ),您可以在 Jersey 或任何 JAX-RS 實現(包括 RestEasy)中執行此操作https://eclipse-ee4j.github.io/jersey.github.io/apidocs/1.19 .1/球衣/javax/ws/rs/core/Response.html

您可以使用以下任一項:

Response.temporaryRedirect(URI)

Response.seeOther(URI)

“臨時重定向”返回 307 狀態代碼,而“查看其他”返回 303。

對於像我這樣正在尋找 302 的人來說,這個答案。

通過查看代碼

Response.temporaryRedirect(URI)

您可以像這樣自定義響應代碼:

Response.status(int).location(URI).build()

請注意,狀態代碼在枚舉中定義

Response.Status

例如 302 是Response.Status.FOUND

擴展上面的 smcg@ 答案,

您可以通過使用ContainerRequestContext.setRequestUri(URI)更改ContainerRequestFilter的請求上下文來實現此目的。 如果您在此處看到 JAX-RS 規范(第 6.2 節),則會提到@PreMatching請求過濾器。 根據文檔;

使用 @PreMatching 注釋的 ContainerRequestFilter 在收到客戶端請求后但在匹配資源方法之前執行。 因此,這種類型的過濾器能夠修改匹配算法的輸入(參見第 3.7.2 節),從而改變其結果。

一個非常幼稚的過濾器可能是這樣的;

@PreMatching
class RedirectFilter: ContainerRequestFilter {
    override fun filter(requestContext: ContainerRequestContext?) {

      requestContext!!.setRequestUri(URI.create("<redirect_uri>"))
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM