[英]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.