@Test public void http11() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com"); rv.setHttp10Compatible(false); rv.render(new HashMap<>(), request, response); assertEquals(303, response.getStatus()); assertEquals("http://url.somewhere.com", response.getHeader("Location")); }
@Test public void explicitStatusCodeHttp10() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com"); rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY); rv.render(new HashMap<>(), request, response); assertEquals(301, response.getStatus()); assertEquals("http://url.somewhere.com", response.getHeader("Location")); }
@Test public void attributeStatusCodeHttp10() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com"); request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.CREATED); rv.render(new HashMap<>(), request, response); assertEquals(201, response.getStatus()); assertEquals("http://url.somewhere.com", response.getHeader("Location")); }
@Test public void explicitStatusCodeHttp11() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com"); rv.setHttp10Compatible(false); rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY); rv.render(new HashMap<>(), request, response); assertEquals(301, response.getStatus()); assertEquals("http://url.somewhere.com", response.getHeader("Location")); }
@Test public void attributeStatusCodeHttp11() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com"); rv.setHttp10Compatible(false); request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.CREATED); rv.render(new HashMap<>(), request, response); assertEquals(201, response.getStatus()); assertEquals("http://url.somewhere.com", response.getHeader("Location")); }
@Test public void propagateQueryParams() throws Exception { RedirectView rv = new RedirectView(); rv.setPropagateQueryParams(true); rv.setUrl("http://url.somewhere.com?foo=bar#bazz"); request.setQueryString("a=b&c=d"); rv.render(new HashMap<>(), request, response); assertEquals(302, response.getStatus()); assertEquals("http://url.somewhere.com?foo=bar&a=b&c=d#bazz", response.getHeader("Location")); }
@Test public void addRedirectViewController() throws Exception { this.registry.addRedirectViewController("/path", "/redirectTo"); RedirectView redirectView = getRedirectView("/path"); this.request.setQueryString("a=b"); this.request.setContextPath("/context"); redirectView.render(Collections.emptyMap(), this.request, this.response); assertEquals(302, this.response.getStatus()); assertEquals("/context/redirectTo", this.response.getRedirectedUrl()); assertNotNull(redirectView.getApplicationContext()); }
@Test public void addRedirectViewControllerWithCustomSettings() throws Exception { this.registry.addRedirectViewController("/path", "/redirectTo") .setContextRelative(false) .setKeepQueryParams(true) .setStatusCode(HttpStatus.PERMANENT_REDIRECT); RedirectView redirectView = getRedirectView("/path"); this.request.setQueryString("a=b"); this.request.setContextPath("/context"); redirectView.render(Collections.emptyMap(), this.request, this.response); assertEquals(308, this.response.getStatus()); assertEquals("/redirectTo?a=b", response.getRedirectedUrl()); assertNotNull(redirectView.getApplicationContext()); }
@Test @SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") public void flashMap() throws Exception { RedirectView rv = new RedirectView(); rv.setUrl("http://url.somewhere.com/path"); rv.setHttp10Compatible(false); FlashMap flashMap = new FlashMap(); flashMap.put("successMessage", "yay!"); request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, flashMap); ModelMap model = new ModelMap("id", "1"); rv.render(model, request, response); assertEquals(303, response.getStatus()); assertEquals("http://url.somewhere.com/path?id=1", response.getHeader("Location")); assertEquals("/path", flashMap.getTargetRequestPath()); assertEquals(model, flashMap.getTargetRequestParams().toSingleValueMap()); }
@Test public void updateTargetUrlWithContextLoader() throws Exception { StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.registerSingleton("requestDataValueProcessor", RequestDataValueProcessorWrapper.class); MockServletContext servletContext = new MockServletContext(); ContextLoader contextLoader = new ContextLoader(wac); contextLoader.initWebApplicationContext(servletContext); try { RequestDataValueProcessor mockProcessor = mock(RequestDataValueProcessor.class); wac.getBean(RequestDataValueProcessorWrapper.class).setRequestDataValueProcessor(mockProcessor); RedirectView rv = new RedirectView(); rv.setUrl("/path"); given(mockProcessor.processUrl(request, "/path")).willReturn("/path?key=123"); rv.render(new ModelMap(), request, response); verify(mockProcessor).processUrl(request, "/path"); } finally { contextLoader.closeWebApplicationContext(servletContext); } }
@Test public void updateTargetUrl() throws Exception { StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.registerSingleton("requestDataValueProcessor", RequestDataValueProcessorWrapper.class); wac.setServletContext(new MockServletContext()); wac.refresh(); RequestDataValueProcessor mockProcessor = mock(RequestDataValueProcessor.class); wac.getBean(RequestDataValueProcessorWrapper.class).setRequestDataValueProcessor(mockProcessor); RedirectView rv = new RedirectView(); rv.setApplicationContext(wac); // Init RedirectView with WebAppCxt rv.setUrl("/path"); request.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); given(mockProcessor.processUrl(request, "/path")).willReturn("/path?key=123"); rv.render(new ModelMap(), request, response); verify(mockProcessor).processUrl(request, "/path"); }
RedirectView redirectView = (RedirectView) mv.getView(); MockHttpServletResponse response = new MockHttpServletResponse(); redirectView.render(Collections.emptyMap(), request, response); assertEquals("/new?a=b", response.getRedirectedUrl()); assertEquals(308, response.getStatus());
/** * Prepares the view given the specified model, merging it with static * attributes and a RequestContext attribute, if necessary. * Delegates to renderMergedOutputModel for the actual rendering. * * @see #renderMergedOutputModel */ public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { if (model == null) { model = new HashMap(); } model.putAll(getPortalParamManager().getParams(request)); super.render(model, request, response); }
@Override public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { if (handlerUrlResolver == null) { WebApplicationContext context = RequestContextUtils.getWebApplicationContext(request); handlerUrlResolver = (HandlerUrlResolver) context.getBean("handlerUrlResolver"); } String handlerUrl = handlerUrlResolver.getUrlForHandler(handlerName, model, null); Assert.notNull(handlerUrl, "Can't resolve URL for handler " + handlerName); setUrl(handlerUrl); setContextRelative(true); super.render(model, request, response); }
@Override public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { Site site = PageResolver.getSite(request); Page page = ContentPage.loadByTypeAndSite(pageType, site); String url = new PageFacade(page, request, response).getUrl(); if (addRequestParameters) { url = ServletUtils.addRequestParameters(url, request); } setUrl(url); super.render(model, request, response); } }