excel能翻译中文吗
1143
2022-05-29
28.2“spring WebFlux框架”
Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架。与Spring MVC不同,它不需要Servlet API,完全异步且无阻塞,并 通过Reactor项目实现Reactive Streams规范。
Spring WebFlux有两种版本:基于功能和注释。基于注释的注释非常接近Spring MVC模型,如以下示例所示:
@RestController @RequestMapping("/users") public class MyRestController { @GetMapping("/{user}") public Mono
“WebFlux.fn”是功能变体,它将路由配置与请求的实际处理分开,如以下示例所示:
@Configuration public class RoutingConfiguration { @Bean public RouterFunction
WebFlux是Spring Framework的一部分,详细信息可在其 参考文档中找到。
[注]
您可以根据需要定义任意数量的RouterFunctionbean来模块化路由器的定义。如果需要应用优先级,可以订购Bean。
要开始,请将spring-boot-starter-webflux模块添加到您的应用程序中。
[注]
在应用程序中添加两个spring-boot-starter-web和spring-boot-starter-webflux模块会导致Spring Boot自动配置Spring MVC,而不是WebFlux。选择此行为是因为许多Spring开发人员spring-boot-starter-webflux 在其Spring MVC应用程序中添加了使用被动的WebClient。您仍然可以通过将所选应用程序类型设置为来强制执行您的选择 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)。
28.2.1 Spring WebFlux自动配置
Spring Boot为Spring WebFlux提供自动配置,适用于大多数应用程序。
自动配置在Spring的默认值之上添加了以下功能:
为for HttpMessageReader和HttpMessageWriter实例配置编解码器( 本文档稍后将介绍)。
支持提供静态资源,包括对WebJars的支持( 本文档后面将介绍)。
如果你想保留Spring Boot WebFlux功能,并且想要添加额外的 WebFlux配置,你可以添加自己的 @Configuration类类WebFluxConfigurer但不需要 @EnableWebFlux。
如果要完全控制Spring WebFlux,可以添加自己的 @Configuration注释@EnableWebFlux。
28.2.2带有HttpMessageReaders和HttpMessageWriters的HTTP编解码器
Spring WebFlux使用HttpMessageReader和HttpMessageWriter接口来转换HTTP请求和响应。CodecConfigurer通过查看类路径中可用的库,它们被配置为具有合理的默认值。
Spring Boot通过使用CodecCustomizer实例进一步自定义。例如,spring.jackson.*配置密钥应用于Jackson编解码器。
如果需要添加或自定义编解码器,可以创建自定义CodecCustomizer 组件,如以下示例所示:
import org.springframework.boot.web.codec.CodecCustomizer; @Configuration public class MyConfiguration { @Bean public CodecCustomizer myCodecCustomizer(){ return codecConfigurer - > { // ... } } }
您还可以利用Boot的自定义JSON序列化程序和反序列化程序。
28.2.3静态内容
默认情况下,Spring Boot从类路径中名为/static( /public或/resources或/META-INF/resources)的目录中提供静态内容。它使用 ResourceWebHandlerSpring WebFlux,以便您可以通过添加自己WebFluxConfigurer的addResourceHandlers方法来修改该行为并覆盖该方法。
默认情况下,会映射资源/**,但您可以通过设置spring.webflux.static-path-pattern属性来调整它 。例如,/resources/**可以按如下方式重新定位所有资源 :
spring.webflux.static-path-pattern = / resources / **
您还可以使用自定义静态资源位置 spring.resources.static-locations。这样做会将默认值替换为目录位置列表。如果这样做,默认的欢迎页面检测会切换到您的自定义位置。因此,如果index.html您的任何位置在启动时存在,则它是应用程序的主页。
除了前面列出的“标准”静态资源位置之外,还为Webjars内容制作了一个特例。具有路径的任何资源 /webjars/**都是从jar文件提供的,如果它们以Webjars格式打包的话。
[注]
Spring WebFlux应用程序并不严格依赖于Servlet API,因此它们不能作为war文件部署,也不能使用该src/main/webapp目录。
28.2.4模板引擎
除REST Web服务外,您还可以使用Spring WebFlux来提供动态HTML内容。Spring WebFlux支持各种模板技术,包括Thymeleaf,FreeMarker和Mustache。
Spring Boot包含对以下模板引擎的自动配置支持:
FreeMarker
Thymeleaf
胡子
当您使用其中一个模板引擎和默认配置时,您的模板将自动从中获取src/main/resources/templates。
28.2.5错误处理
Spring Boot提供了WebExceptionHandler一种以合理的方式处理所有错误的方法。它在处理顺序中的位置紧接在WebFlux提供的处理程序之前,这被认为是最后的。对于计算机客户端,它会生成一个JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,有一个“whitelabel”错误处理程序,它以HTML格式呈现相同的数据。您还可以提供自己的HTML模板来显示错误(请参阅 下一节)。
自定义此功能的第一步通常涉及使用现有机制,但替换或扩充错误内容。为此,您可以添加类型的bean ErrorAttributes。
要更改错误处理行为,可以实现ErrorWebExceptionHandler并注册该类型的bean定义。由于a WebExceptionHandler是一个非常低级别的,Spring Boot还提供了一个方便AbstractErrorWebExceptionHandler的让你以WebFlux功能方式处理错误,如下例所示:
public class CustomErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler { // Define constructor here @Override protected RouterFunction
要获得更完整的图片,您还可以DefaultErrorWebExceptionHandler 直接子类化并覆盖特定方法。
自定义错误页面
如果要显示给定状态代码的自定义HTML错误页面,可以将文件添加到文件/error夹。错误页面可以是静态HTML(即,添加到任何静态资源文件夹下)或使用模板构建。文件名应该是确切的状态代码或系列掩码。
例如,要映射404到静态HTML文件,您的文件夹结构如下所示:
src/
+- main/
+- java/
| +
+- resources/
+- public/
+- error/
| +- 404.html
+-
要5xx使用Mustache模板映射所有错误,您的文件夹结构如下:
src/
+- main/
+- java/
| +
+- resources/
+- templates/
+- error/
| +- 5xx.mustache
+-
28.2.6 Web过滤器
Spring WebFlux提供了一个WebFilter可以实现过滤HTTP请求 - 响应交换的接口。WebFilter在应用程序上下文中找到的bean将自动用于过滤每个交换。
如果过滤器的顺序很重要,则可以实现Ordered或注释@Order。Spring Boot自动配置可以为您配置Web过滤器。执行此操作时,将使用下表中显示的订单:
MetricsWebFilter
Ordered.HIGHEST_PRECEDENCE + 1
WebFilterChainProxy (Spring Security)
-100
HttpTraceWebFilter
Ordered.LOWEST_PRECEDENCE - 10
MVC Spring Boot Spring
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。