Now here is the ExternalRedirectView, as planned in my comment above ... did just that.
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.RedirectView;
public class ExternalRedirectView extends RedirectView {
public ExternalRedirectView(String url, boolean contextRelative) {
super(url, contextRelative);
}
@Override
protected void sendRedirect( HttpServletRequest request,
HttpServletResponse response, String targetUrl,
boolean http10Compatible ) throws IOException {
if (http10Compatible) {
response.sendRedirect(targetUrl);
}
else {
response.setStatus(303);
response.setHeader("Location", targetUrl);
}
}
}
I also had my own ViewResolver, in which I added the functionality of the new externalRedirect: magic vier prefix, which now reads:
class MyViewResolver extends AbstractCachingViewResolver implements BeanFactoryAware {
[...]
private static final String EXTERNAL_REDIRECT_URL_PREFIX = "externalRedirect:";
[...]
@Override
protected View loadView( String viewName, Locale locale ) throws Exception {
View view;
if (viewName.startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX))
{
view = new RedirectView(viewName.substring(UrlBasedViewResolver.REDIRECT_URL_PREFIX.length()), true);
}
else if (viewName.startsWith(EXTERNAL_REDIRECT_URL_PREFIX))
{
view = new ExternalRedirectView(viewName.substring(EXTERNAL_REDIRECT_URL_PREFIX.length()), true);
}
else
[...] Thanks to everyone who read this and thought about it.
source
share