首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构之Spring Boot(三十六)

微服务架构之Spring Boot(三十六)

作者头像
用户1289394
发布2022-04-07 20:01:19
发布2022-04-07 20:01:19
7360
举报
文章被收录于专栏:Java学习网Java学习网

28.2.1 Spring WebFlux自动配置

Spring Boot为Spring WebFlux提供自动配置,适用于大多数应用程序。

自动配置在Spring的默认值之上添加了以下功能:

为 HttpMessageReader 和 HttpMessageWriter 实例配置编解码器( 本文档后面会介绍)。

支持提供静态资源,包括对WebJars的支持( 本文档后面将介绍)。

如果你想保留Spring Boot WebFlux功能,并且想要添加额外的 WebFlux配置,你可以添加自己的 @Configuration 类 WebFluxConfigurer

但没有 @EnableWebFlux 。

如果您想完全控制Spring WebFlux,可以使用 @EnableWebFlux 添加自己的 @Configuration 注释。

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 )的目录中提供静态内容。它使用

来自Spring WebFlux的 ResourceWebHandler ,以便您可以通过添加自己的 WebFluxConfigurer 并覆盖 addResourceHandlers 方法来修改

该行为。

默认情况下,资源映射到 /** ,但您可以通过设置 spring.webflux.static-path-pattern 属性来调整它。例如,将所有资源重新定位

到 /resources/** 可以实现如下:

spring.webflux.static-path-pattern=/resources/**

您还可以使用 spring.resources.static-locations 自定义静态资源位置。这样做会将默认值替换为目录位置列表。如果这样做,默认的欢

迎页面检测会切换到您的自定义位置。因此,如果您在启动时的任何位置都有 index.html ,那么它就是应用程序的主页。

除了前面列出的“标准”静态资源位置之外,还为Webjars内容制作了一个特例。如果文件以Webjars格式打包,那么具有 /webjars/** 中路径

的任何资源都将从jar文件中提供。

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定义。因为 WebExceptionHandler 非常低级,Spring

Boot还提供了一个方便的 AbstractErrorWebExceptionHandler 来让你以WebFlux函数方式处理错误,如下例所示:

public class CustomErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {

// Define constructor here

@Override

protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {

return RouterFunctions

.route(aPredicate, aHandler)

.andRoute(anotherPredicate, anotherHandler);

}

}

要获得更完整的图片,您还可以直接继承 DefaultErrorWebExceptionHandler 并覆盖特定方法。

自定义错误页面

如果要显示给定状态代码的自定义HTML错误页面,可以将文件添加到 /error 文件夹。错误页面可以是静态HTML(即,添加到任何静态资源

文件夹下)或使用模板构建。文件名应该是确切的状态代码或系列掩码。

例如,要将 404 映射到静态HTML文件,您的文件夹结构将如下所示:

src/

+- main/

+- java/

| + <source code>

+- resources/

+- public/

+- error/

| +- 404.html

+- <other public assets>

要使用Mustache模板映射所有 5xx 错误,您的文件夹结构如下:

src/

+- main/

+- java/

| + <source code>

+- resources/

+- templates/

+- error/

| +- 5xx.mustache

+- <other templates>

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档