简体   繁体   中英

Send redirect from a JAX-RS service

Is it possible to have a JAX-RS web service redirect to another web page?

Like as you would do with Servlet response.sendRedirect("http://test/test.html") .

The JAX-RS web service should itself redirect. I'm using RESTEasy if that's relevant.

Yes, you can do this in Jersey or any JAX-RS implementation (including RestEasy) if your return type is a Response (or HttpServletResponse ) https://eclipse-ee4j.github.io/jersey.github.io/apidocs/1.19.1/jersey/javax/ws/rs/core/Response.html

You can use either of the following:

Response.temporaryRedirect(URI)

Response.seeOther(URI)

"Temporary Redirect" returns a 307 status code while "See Other" returns 303.

For those like me looking for 302 that fall on this answer.

By looking the code of

Response.temporaryRedirect(URI)

You can customize your response code like this :

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

Note that status code are define in enum

Response.Status

And for example 302 is Response.Status.FOUND

Extending smcg@ answer above,

You can achieve this by altering the request context in a ContainerRequestFilter by using ContainerRequestContext.setRequestUri(URI) . If you see the JAX-RS specification (Section 6.2) here , there is a mention of @PreMatching request filters. According to the documentation;

A ContainerRequestFilter that is annotated with @PreMatching is executed upon receiving a client request but before a resource method is matched. Thus, this type of filter has the ability to modify the input to the matching algorithm (see Section 3.7.2) and, consequently, alter its outcome.

A very naive filter can be like this;

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM