@Test // SPR-15291 public void contentNegotiationWithRedirect() { HandlerResult handlerResult = new HandlerResult(new Object(), "redirect:/", on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(String.class), this.bindingContext); UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); viewResolver.setApplicationContext(new StaticApplicationContext()); ViewResolutionResultHandler resultHandler = resultHandler(viewResolver); MockServerWebExchange exchange = MockServerWebExchange.from(get("/account").accept(APPLICATION_JSON)); resultHandler.handleResult(exchange, handlerResult).block(Duration.ZERO); MockServerHttpResponse response = exchange.getResponse(); assertEquals(303, response.getStatusCode().value()); assertEquals("/", response.getHeaders().getLocation().toString()); }
testHandle("/path", returnType, returnValue, "account: {id=123}"); returnType = on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(String.class); returnValue = "account"; testHandle("/path", returnType, returnValue, "account: {id=123}", resolver); returnType = on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(Map.class); returnValue = Collections.singletonMap("name", "Joe"); testHandle("/account", returnType, returnValue, "account: {id=123, name=Joe}", resolver);
@Test public void supports() { testSupports(on(Handler.class).annotPresent(ModelAttribute.class).resolveReturnType(String.class)); testSupports(on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(String.class)); testSupports(on(Handler.class).resolveReturnType(Mono.class, String.class)); testSupports(on(Handler.class).resolveReturnType(Rendering.class)); testSupports(on(Handler.class).resolveReturnType(Mono.class, Rendering.class)); testSupports(on(Handler.class).resolveReturnType(View.class)); testSupports(on(Handler.class).resolveReturnType(Mono.class, View.class)); testSupports(on(Handler.class).resolveReturnType(void.class)); testSupports(on(Handler.class).resolveReturnType(Mono.class, Void.class)); testSupports(on(Handler.class).resolveReturnType(Completable.class)); testSupports(on(Handler.class).resolveReturnType(Model.class)); testSupports(on(Handler.class).annotPresent(ModelAttribute.class).resolveReturnType(Map.class)); testSupports(on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(Map.class)); testSupports(on(Handler.class).resolveReturnType(TestBean.class)); testSupports(on(Handler.class).annotPresent(ModelAttribute.class).resolveReturnType(Long.class)); testDoesNotSupport(on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(Long.class)); // SPR-15464 testSupports(on(Handler.class).resolveReturnType(Mono.class)); }
@Test public void handleWithMultipleResolvers() { testHandle("/account", on(Handler.class).annotNotPresent(ModelAttribute.class).resolveReturnType(String.class), "profile", "profile: {id=123}", new TestViewResolver("account"), new TestViewResolver("profile")); }
@Test public void supports() throws NoSuchMethodException { Object controller = new TestController(); Method method; method = on(TestController.class).annotPresent(ResponseBody.class).resolveMethod(); testSupports(controller, method); method = on(TestController.class).annotNotPresent(ResponseBody.class).resolveMethod("doWork"); HandlerResult handlerResult = getHandlerResult(controller, method); assertFalse(this.resultHandler.supports(handlerResult)); }