@Override public List<ViewResolver> viewResolvers() { return this.strategies.viewResolvers(); } }
@Override public List<ViewResolver> viewResolvers() { return this.strategies.viewResolvers(); } }
@Override public List<ViewResolver> viewResolvers() { return strategies.viewResolvers(); } };
@Test public void render() { Map<String, Object> model = Collections.singletonMap("foo", "bar"); Mono<RenderingResponse> result = RenderingResponse.create("view").modelAttributes(model).build(); MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("http://localhost")); ViewResolver viewResolver = mock(ViewResolver.class); View view = mock(View.class); when(viewResolver.resolveViewName("view", Locale.ENGLISH)).thenReturn(Mono.just(view)); when(view.render(model, null, exchange)).thenReturn(Mono.empty()); List<ViewResolver> viewResolvers = new ArrayList<>(); viewResolvers.add(viewResolver); HandlerStrategies mockConfig = mock(HandlerStrategies.class); when(mockConfig.viewResolvers()).thenReturn(viewResolvers); StepVerifier.create(result) .expectNextMatches(response -> "view".equals(response.name()) && model.equals(response.model())) .expectComplete() .verify(); }
@Test public void withDefaults() { HandlerStrategies strategies = HandlerStrategies.withDefaults(); assertFalse(strategies.messageReaders().isEmpty()); assertFalse(strategies.messageWriters().isEmpty()); assertTrue(strategies.viewResolvers().isEmpty()); }
@Test public void empty() { HandlerStrategies strategies = HandlerStrategies.empty().build(); assertTrue(strategies.messageReaders().isEmpty()); assertTrue(strategies.messageWriters().isEmpty()); assertTrue(strategies.viewResolvers().isEmpty()); }
@Override public Mono<Void> writeTo(ServerWebExchange exchange, HandlerStrategies strategies) { ServerHttpResponse response = exchange.getResponse(); writeStatusAndHeaders(response); MediaType contentType = exchange.getResponse().getHeaders().getContentType(); Locale acceptLocale = exchange.getRequest().getHeaders().getAcceptLanguageAsLocale(); Locale locale = (acceptLocale != null ? acceptLocale : Locale.getDefault()); Stream<ViewResolver> viewResolverStream = strategies.viewResolvers().get(); return Flux.fromStream(viewResolverStream) .concatMap(viewResolver -> viewResolver.resolveViewName(this.name, locale)) .next() .otherwiseIfEmpty(Mono.error(new IllegalArgumentException("Could not resolve view with name '" + this.name +"'"))) .then(view -> view.render(this.model, contentType, exchange)); }