web(Web 模块)
简介
continew-starter-web
是 ContiNew Starter 库的 Web 模块,也是快速创建一个 Spring Boot Web 应用的可靠基石。
<dependency>
<groupId>top.continew</groupId>
<artifactId>continew-starter-web</artifactId>
</dependency>
主要特性
- 版本锁定:涉及依赖已进行版本锁定,使用时无需配置版本
- 跨域配置:通过配置文件配置跨域过滤器(CorsFilter)
- 统一响应处理:统一返回结果、异常处理、错误码填充(基于 Graceful Response)
- Query 参数转换器:Date、LocalDate、LocalTime、LocalDateTime、BaseEnum 类型参数自动转换
- 调整 Tomcat 为 Undertow 服务器,并支持扩展配置:支持全局禁用请求方式
跨域配置
前后端 Web 应用开发,跨域肯定是避不开的配置。
配置详情请查看:top.continew.starter.web.autoconfigure.cors.CorsProperties
。
--- ### 跨域配置
continew-starter.web:
cors:
enabled: true
# 配置允许跨域的域名
allowed-origins: '*'
# 配置允许跨域的请求方式
allowed-methods: '*'
# 配置允许跨域的请求头
allowed-headers: '*'
# 配置允许跨域的响应头
exposed-headers: '*'
统一响应处理
使用 Graceful Response 组件实现统一响应处理解决方案。
Graceful Response 是一个 Spring Boot 技术栈下的优雅响应处理组件,可以帮助开发者完成响应数据封装、异常处理、错误码填充等过程,提高开发效率,提高代码质量。
本模块仅仅对该组件做了一些简单处理,如:覆盖自动配置、指定配置默认值、自定义响应风格类、添加接口文档全局处理,所以详细文档你可以查阅 Graceful Response 文档(见参考资料链接)。
启用统一响应处理
本模块覆盖了 Graceful Response 的自动配置,所以需要使用本模块的注解启用统一响应处理。原组件注解为:@EnableGracefulResponse
。
@EnableGlobalResponse
@SpringBootApplication
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
全局配置
配置详情请查看:top.continew.starter.web.autoconfigure.response.GlobalResponseProperties
。原组件配置前缀为:graceful-response
。
其实,我们已经做了一些默认配置,详情请查看:continew-starter-web/src/main/resources/default-web.yml
,日常使用下方这些配置就够调整了。
--- ### 全局响应配置
continew-starter.web:
response:
# 是否开启国际化(默认:false)
i18n: false
# 自定义失败 HTTP 状态码(默认:200,建议业务和通信状态码区分)
default-http-status-code-on-error: 200
# 自定义成功响应码(默认:0)
default-success-code: 0
# 自定义成功提示(默认:ok)
default-success-msg: ok
# 自定义失败响应码(默认:1)
default-error-code: 1
# 自定义失败提示(默认:error)
default-error-msg: error
# 是否将原生异常错误信息填充到状态信息中
origin-exception-using-detail-message: false
# 响应类全名(配置后 response-style 将不再生效)
response-class-full-name: top.continew.starter.web.model.R
自定义响应类
我们已经定义了一套 top.continew.starter.web.model.R
统一结构,Graceful Response 也提供了两套风格,如果他们都不能满足你的要求。
你可以通过参考 top.continew.starter.web.model.R
来自定义响应类,并替换 response-class-full-name
配置值即可。
排除统一封装
默认情况下,统一响应处理会包装原始响应数据,将原始数据嵌入到 response class 中统一结构返回。
但有些场景,我们不需要包装原始数据,只需要直接返回,如下载文件场景,可以在接口方法或类上添加 @ExcludeFromGracefulResponse
注解来排除统一封装。
Query 参数转换器
默认情况下,Spring MVC 无法直接转换 Query 中的 Date 等日期类型参数,需要使用 @DateTimeFormat
注解进行转换。
现在我们添加了 Query 参数转换器,将 Date
、LocalDate
、LocalTime
、LocalDateTime
、BaseEnum
等类型参数自动转换,默认格式为 yyyy-MM-dd HH:mm:ss
,如果这个格式无法满足你的要求,可以继续使用 @DateTimeFormat
注解进行转换。
Undertow 服务器扩展配置
我们增强了 Undertow 服务器配置,用于支持全局禁用部分请求方式,而且我们还对 undertow 服务器的线程池增加了部分默认配置,详情请查看:continew-starter-web/src/main/resources/default-web.yml
。
--- ### 服务器配置
server:
extension:
enabled: true
# 默认禁止三个不安全的 HTTP 方法(CONNECT、TRACE、TRACK)
disallowed-methods:
- CONNECT
- TRACE
- TRACK
核心依赖
依赖 | 描述 |
---|---|
top.continew:continew-starter-json-jackson | |
top.continew:continew-starter-api-doc | |
org.springframework.boot:spring-boot-starter-web | 提供 Spring MVC Web 开发能力,默认内置 Tomcat 服务器,我们调整为了默认 Undertow。 |
org.springframework.boot:spring-boot-starter-undertow | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 |
com.feiniaojin:graceful-response | 一个Spring Boot技术栈下的优雅响应处理组件,可以帮助开发者完成响应数据封装、异常处理、错误码填充等过程,提高开发效率,提高代码质量 |
参考资料
1.Graceful Response 项目主页:https://doc.feiniaojin.com/graceful-response/home.html