All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.reactive.result.view.Rendering Maven / Gradle / Ivy

/*
 * Copyright 2002-2017 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.reactive.result.view;

import java.util.Collection;
import java.util.Map;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.lang.Nullable;
import org.springframework.ui.Model;

/**
 * Public API for HTML rendering. Supported as a return value in Spring WebFlux
 * controllers. Comparable to the use of {@code ModelAndView} as a return value
 * in Spring MVC controllers.
 *
 * 

Controllers typically return a {@link String} view name and rely on the * "implicit" model which can also be injected into the controller method. * Or controllers may return model attribute(s) and rely on a default view name * being selected based on the request path. * *

{@link Rendering} can be used to combine a view name with model attributes, * set the HTTP status or headers, and for other more advanced options around * redirect scenarios. * * @author Rossen Stoyanchev * @since 5.0 */ public interface Rendering { /** * Return the selected {@link String} view name or {@link View} object. */ @Nullable Object view(); /** * Return attributes to add to the model. */ Map modelAttributes(); /** * Return the HTTP status to set the response to. */ @Nullable HttpStatus status(); /** * Return headers to add to the response. */ HttpHeaders headers(); /** * Create a new builder for response rendering based on the given view name. * @param name the view name to be resolved to a {@link View} * @return the builder */ static Builder view(String name) { return new DefaultRenderingBuilder(name); } /** * Create a new builder for a redirect through a {@link RedirectView}. * @param url the redirect URL * @return the builder */ static RedirectBuilder redirectTo(String url) { return new DefaultRenderingBuilder(new RedirectView(url)); } /** * Defines a builder for {@link Rendering}. */ interface Builder> { /** * Add the given model attribute with the supplied name. * @see Model#addAttribute(String, Object) */ B modelAttribute(String name, Object value); /** * Add an attribute to the model using a * {@link org.springframework.core.Conventions#getVariableName generated name}. * @see Model#addAttribute(Object) */ B modelAttribute(Object value); /** * Add all given attributes to the model using * {@link org.springframework.core.Conventions#getVariableName generated names}. * @see Model#addAllAttributes(Collection) */ B modelAttributes(Object... values); /** * Add the given attributes to the model. * @see Model#addAllAttributes(Map) */ B model(Map map); /** * Specify the status to use for the response. */ B status(HttpStatus status); /** * Specify a header to add to the response. */ B header(String headerName, String... headerValues); /** * Specify headers to add to the response. */ B headers(HttpHeaders headers); /** * Builder the {@link Rendering} instance. */ Rendering build(); } /** * Extends {@link Builder} with extra options for redirect scenarios. */ interface RedirectBuilder extends Builder { /** * Whether to the provided redirect URL should be prepended with the * application context path (if any). *

By default this is set to {@code true}. * * @see RedirectView#setContextRelative(boolean) */ RedirectBuilder contextRelative(boolean contextRelative); /** * Whether to append the query string of the current URL to the target * redirect URL or not. *

By default this is set to {@code false}. * * @see RedirectView#setPropagateQuery(boolean) */ RedirectBuilder propagateQuery(boolean propagate); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy