# web-spring-boot-starter
**Repository Path**: liuyangbox/web-spring-boot-starter
## Basic Information
- **Project Name**: web-spring-boot-starter
- **Description**: spring web 常用配置:异常链接,Response包装,跨域
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-09-29
- **Last Updated**: 2021-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# web-spring-boot-starter
> 提供web相关的常用配置,开箱即用,也支持高度的自定义与功能开关
## 1.controller-web-spring-boot-starter
- 跨域自动配置`com.zhituanbox.web.controller.CorsAutoConfiguration`
- Rest接口返回值包装`com.zhituanbox.web.controller.RestWrapperResponseBodyAutoConfiguration`
- 异常处理`com.zhituanbox.web.controller.ExceptionAutoConfiguration`
### 1.1 跨域配置
```properties
# 默认开启
spring.zhituanbox.web.cors.enable=true
spring.zhituanbox.web.cors.dynamic=true
# 默认:*
spring.zhituanbox.web.cors.allowed-headers=*
# 默认:*
spring.zhituanbox.web.cors.allowed-origins=*
# 默认:*
spring.zhituanbox.web.cors.allowed-methods=PUT, OPTIONS, GET, HEAD, PATCH, POST, DELETE
spring.zhituanbox.web.cors.max-age=1H
spring.zhituanbox.web.cors.with-credentials=true
```
**spring.zhituanbox.web.cors.dynamic**
```java
/**
* 是否动态响应
*
当CorsProperties#withCredentials设置为true时,也会采用动态模式
* 当允许的时候,显示的参数为客户端传过来的值;解决火狐中设置*跨域失败问题
*/
private Boolean dynamic = Boolean.FALSE;
```
**spring.zhituanbox.web.cors.max-age**
跨域缓存时间,默认为`null`,则使用`spring`跨域配置默认时间`30min`
```java
//org.springframework.web.servlet.config.annotation.CorsRegistration#maxAge
/**
* Configure how long in seconds the response from a pre-flight request
* can be cached by clients.
* By default this is set to 1800 seconds (30 minutes).
*/
public CorsRegistration maxAge(long maxAge) {
this.config.setMaxAge(maxAge);
return this;
}
```
**spring.zhituanbox.web.cors.with-credentials**
```java
/**
* 表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器
* @see HttpHeaders#ACCESS_CONTROL_ALLOW_CREDENTIALS
*/
@NotNull
private Boolean withCredentials = Boolean.FALSE;
```
#### 1.1.1.启动日志
> 服务启动之后,控制台打印相关配置信息
```verilog
--------------------------------------------------------------------
| 跨域: DynamicCorsFilter.class |
--------------------------------------------------------------------
| dynamic : true |
| maxAge : 1小时
| withCredentials : true |
| allowedMethods : [GET, PATCH, PUT, DELETE, OPTIONS, HEAD, POST] |
| allowedOrigins : [*] |
| allowedHeaders : [*] |
| enable : true |
--------------------------------------------------------------------
```
### 1.2.Rest接口返回值包装
```
# 是否开启返回值包装:默认开启
spring.zhituanbox.web.response.wrapper.enable=true
spring.zhituanbox.web.response.wrapper.exclude-classes=java.io.File
```
**spring.zhituanbox.web.response.wrapper.exclude-classes**
```java
/**
* 需要排除的返回值类型
*
当接口返回的是此类型时,不进行包装
* 该类与该类的子类都不会进行包装
* @see cn.hutool.core.util.ClassUtil#isAssignable(Class, Class)
* @see RestWrapperResponseBodyHandler
* @see RestWrapperResponseBodyAdvice
*/
private Class>[] excludeClasses;
```
#### 1.2.1.`@UnWrapper`
`com.zhituanbox.web.controller.core.response.annotation.UnWrapper`
此注解可以使用在`Controller`类或者`Controller`方法
- 打在类上,则表示该类下所有方法都不进行包装
- 打在方法上,则表示该方法不进行包装
#### 1.2.2.启动日志
```
------------------------------------------------
| 全局返回值处理: RestWrapperResponseBodyAdvice.cla |
------------------------------------------------
| excludeClasses : [class java.io.File] |
| enable : true |
------------------------------------------------
```
#### 1.2.3.测试
```java
@RestController
public class RestWrapperResponseBodyController {
@GetMapping("/wrapper/string")
public String stringWrapper() {
return "wrapper";
}
}
```
访问[http://localhost:9003/wrapper/string](http://localhost:9003/wrapper/string)
```json
// 请求返回值
{
"code": "success",
"message": null,
"data": "wrapper"
}
```
#### 1.2.4.返回值结构
默认实现返回的包装接口为:`com.zhituanbox.web.controller.support.response.DefaultRestWrapperResponseBodyHandler`
如果想自定义,则自定义实现`com.zhituanbox.web.controller.core.response.RestWrapperResponseBodyHandler`接口即可
**示例**
将返回值接口修改成`Map`,key:为返回值类名
```java
public class CustomRestWrapperResponseBodyHandler implements RestWrapperResponseBodyHandler