mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Add documentation for WebMvc.fn
See gh-29683
This commit is contained in:
parent
430d510a33
commit
096ba72a39
@ -22,13 +22,27 @@ The following code shows a typical `@RestController` that serves JSON data:
|
|||||||
include::{docs-java}/features/developingwebapplications/springmvc/MyRestController.java[]
|
include::{docs-java}/features/developingwebapplications/springmvc/MyRestController.java[]
|
||||||
----
|
----
|
||||||
|
|
||||||
|
"`WebMvc.fn`", the functional variant, separates the routing configuration from the actual handling of the requests, as shown in the following example:
|
||||||
|
|
||||||
|
[source,java,indent=0,subs="verbatim"]
|
||||||
|
----
|
||||||
|
include::{docs-java}/features/developingwebapplications/springmvc/MyRoutingConfiguration.java[]
|
||||||
|
----
|
||||||
|
|
||||||
|
[source,java,indent=0,subs="verbatim"]
|
||||||
|
----
|
||||||
|
include::{docs-java}/features/developingwebapplications/springmvc/MyUserHandler.java[]
|
||||||
|
----
|
||||||
|
|
||||||
Spring MVC is part of the core Spring Framework, and detailed information is available in the {spring-framework-docs}/web.html#mvc[reference documentation].
|
Spring MVC is part of the core Spring Framework, and detailed information is available in the {spring-framework-docs}/web.html#mvc[reference documentation].
|
||||||
There are also several guides that cover Spring MVC available at https://spring.io/guides.
|
There are also several guides that cover Spring MVC available at https://spring.io/guides.
|
||||||
|
|
||||||
|
TIP: You can define as many `RouterFunction` beans as you like to modularize the definition of the router.
|
||||||
|
Beans can be ordered if you need to apply a precedence.
|
||||||
|
|
||||||
[[features.developing-web-applications.spring-mvc.auto-configuration]]
|
[[features.developing-web-applications.spring-mvc.auto-configuration]]
|
||||||
==== Spring MVC Auto-configuration
|
==== Spring MVC Auto-configuration
|
||||||
|
|
||||||
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.
|
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.
|
||||||
|
|
||||||
The auto-configuration adds the following features on top of Spring's defaults:
|
The auto-configuration adds the following features on top of Spring's defaults:
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2022 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
|
||||||
|
*
|
||||||
|
* https://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.boot.docs.features.developingwebapplications.springmvc;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.web.servlet.function.RequestPredicate;
|
||||||
|
import org.springframework.web.servlet.function.RouterFunction;
|
||||||
|
import org.springframework.web.servlet.function.ServerResponse;
|
||||||
|
|
||||||
|
import static org.springframework.web.servlet.function.RequestPredicates.accept;
|
||||||
|
import static org.springframework.web.servlet.function.RouterFunctions.route;
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
public class MyRoutingConfiguration {
|
||||||
|
|
||||||
|
private static final RequestPredicate ACCEPT_JSON = accept(MediaType.APPLICATION_JSON);
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RouterFunction<ServerResponse> routerFunction(MyUserHandler userHandler) {
|
||||||
|
// @formatter:off
|
||||||
|
return route()
|
||||||
|
.GET("/{user}", ACCEPT_JSON, userHandler::getUser)
|
||||||
|
.GET("/{user}/customers", ACCEPT_JSON, userHandler::getUserCustomers)
|
||||||
|
.DELETE("/{user}", ACCEPT_JSON, userHandler::deleteUser)
|
||||||
|
.build();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2022 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
|
||||||
|
*
|
||||||
|
* https://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.boot.docs.features.developingwebapplications.springmvc;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.servlet.function.ServerRequest;
|
||||||
|
import org.springframework.web.servlet.function.ServerResponse;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class MyUserHandler {
|
||||||
|
|
||||||
|
public ServerResponse getUser(ServerRequest request) {
|
||||||
|
/**/ return ServerResponse.ok().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerResponse getUserCustomers(ServerRequest request) {
|
||||||
|
/**/ return ServerResponse.ok().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerResponse deleteUser(ServerRequest request) {
|
||||||
|
/**/ return ServerResponse.ok().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -23,8 +23,6 @@ import org.springframework.web.reactive.function.server.RequestPredicate;
|
|||||||
import org.springframework.web.reactive.function.server.RouterFunction;
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
|
||||||
import static org.springframework.web.reactive.function.server.RequestPredicates.DELETE;
|
|
||||||
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
|
|
||||||
import static org.springframework.web.reactive.function.server.RequestPredicates.accept;
|
import static org.springframework.web.reactive.function.server.RequestPredicates.accept;
|
||||||
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
|
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
|
||||||
|
|
||||||
@ -36,10 +34,11 @@ public class MyRoutingConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
public RouterFunction<ServerResponse> monoRouterFunction(MyUserHandler userHandler) {
|
public RouterFunction<ServerResponse> monoRouterFunction(MyUserHandler userHandler) {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
return route(
|
return route()
|
||||||
GET("/{user}").and(ACCEPT_JSON), userHandler::getUser).andRoute(
|
.GET("/{user}", ACCEPT_JSON, userHandler::getUser)
|
||||||
GET("/{user}/customers").and(ACCEPT_JSON), userHandler::getUserCustomers).andRoute(
|
.GET("/{user}/customers", ACCEPT_JSON, userHandler::getUserCustomers)
|
||||||
DELETE("/{user}").and(ACCEPT_JSON), userHandler::deleteUser);
|
.DELETE("/{user}", ACCEPT_JSON, userHandler::deleteUser)
|
||||||
|
.build();
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<suppress files="[\\/]spring-boot-docs[\\/]" checks="JavadocType|JavadocVariable" />
|
<suppress files="[\\/]spring-boot-docs[\\/]" checks="JavadocType|JavadocVariable" />
|
||||||
<suppress files="[\\/]spring-boot-docs[\\/]" checks="SpringJavadoc" message="\@since" />
|
<suppress files="[\\/]spring-boot-docs[\\/]" checks="SpringJavadoc" message="\@since" />
|
||||||
<suppress files="[\\/]spring-boot-docs[\\/].*jooq" checks="AvoidStaticImport" />
|
<suppress files="[\\/]spring-boot-docs[\\/].*jooq" checks="AvoidStaticImport" />
|
||||||
|
<suppress files="[\\/]spring-boot-docs[\\/].*MyRoutingConfiguration\.java" checks="AvoidStaticImport"/>
|
||||||
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" checks="JavadocType" />
|
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" checks="JavadocType" />
|
||||||
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" checks="ImportControl" />
|
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" checks="ImportControl" />
|
||||||
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" id="mainCodeIllegalImportCheck" />
|
<suppress files="[\\/]spring-boot-smoke-tests[\\/]" id="mainCodeIllegalImportCheck" />
|
||||||
|
Loading…
Reference in New Issue
Block a user