# bwstudio-common
**Repository Path**: buwei/bwstudio-common
## Basic Information
- **Project Name**: bwstudio-common
- **Description**: 一些常用类库
common-response - 响应结果类
common-jwt-util - spring cloud gateway中会用到的用于校验jwt token的工具类
unified-response-spring-boot-starter - 为spring boot封装的拦截器来统一响应结果
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 4
- **Created**: 2020-04-02
- **Last Updated**: 2021-05-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# bwstudio-common
#### 介绍
```
- common-response - 统一响应结果枚举类和拓展接口
- common-jwt-util - jwt token的工具类,实现了common-response的拓展接口来实现jwt异常信息统一响应输出
- unified-response-spring-boot-starter - 自定义starter,为spring boot/cloud 输出统一响应结果
- redis-auto-idempotent-spring-boot-starter - 自定义starter, 基于redis的为spring boot/cloud 实现接口自动幂等
```
#### 模块之间的依赖关系
```
common-response - 是所有需要响应结果的工具类和自定义starter的基石
unified-response-spring-boot-starter - 依赖 common-response
redis-auto-idempotent-spring-boot-starter - 依赖 common-response
common-jwt-util - 依赖 common-response
```
#### 安装教程
1. git clone https://gitee.com/buwei/bwstudio-common.git
2. (可选操作)修改spring boot、 spring cloud为你的项目的相同版本,目前源码中版本为
```
2.2.6.RELEASE
Hoxton.SR4
```
3. mvn clean install到本地或upload到私服即可
#### unified-response-spring-boot-starter使用说明
1. 在你的项目中引入依赖
```xml
com.bwstudio.common
unified-response-spring-boot-starter
0.0.1
```
2. 在spring boot项目的配置文件中加入, 比如properties中(yml文件请自行转换)
开启统一响应输出
> unified-response.enabled=true
统一响应输出要拦截的url
> unified-response.interceptor-apiuri=/**
3. 在控制器类或者控制器局部方法中加上@ResponseResult注解, 比如
```java
// 注解控制器类上,对该控制器下的全部api开启统一响应
@ResponseResult
@RestController
@RequestMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_VALUE)
public class HelloController {
// 也可以单独注解在方法上,单独对某个api开启统一响应
@ResponseResult
@GetMapping("/sayHello")
public String sayHello(String name) {
return "Hello, " + name;
}
@GetMapping("/sayHi")
public String sayHi(@RequestHeader("Authorization-UserName") String username) {
return username;
}
}
```
调用sayHello,前端自动响应封装好的响应体,
```json
{"code":"00000","msg":"success","data":"Hello, buwei"}
```
4. 统一自定义异常捕捉的异常拓展方法,将你定义的异常封装到一个enum类中,并需要实现IResponseCode接口,例如:
```java
public enum ResponseCodeEnum implements IResponseCode{
PARAM_ERROR("40003", "参数有误"),
USERNAME_OR_PASSWORD_ERROR("40004", "用户名或密码不正确"),
REFRESH_TOKEN_INVALID("2004", "Refresh Token 不合法");
private String code;
private String message;
@Override
public String getCode() {
return this.code;
}
@Override
public String getMessage() {
return this.message;
}
}
```
然后在你业务逻辑出错的地方抛出你拓展的自定义异常即可,
```java
throw new BusinessException(ResponseCodeEnum.USERNAME_OR_PASSWORD_ERROR);
```
该异常会自动被预定义在unified-response-spring-boot-starter中的全局异常捕捉类捕捉,并封装成统一的json响应体返回前端
#### redis-auto-idempotent-spring-boot-starter 使用说明
1. 在你的项目中引入依赖
```xml
com.bwstudio.common
redis-auto-idempotent-spring-boot-starter
0.0.1
```
2. 在spring boot项目的配置文件中加入一下两个配置, 比如application.properties中(yml文件请自行转换)
开启自动幂等性处理拦截器
> redis-auto-idempotent.enabled=true
设置幂等性token的自动过期时间,单位:毫秒
> redis-auto-idempotent.token-expire-time-in-ms=30000
3. 在控制器方法上加上@AutoIdempotent, 比如
```java
@RestController
public class TestIdempotenceController {
@AutoIdempotent
@PostMapping("/test")
public String testIdempotence() {
return "Hello World";
}
}
```
4. 启动demo
首先获取幂等性token,引入redis-auto-idempotent-spring-boot-starter会随你的项目自动启动一个控制器来提供获取幂等性token的api
> GET localhost:8080/auto-idempotent/token
这时会你的spring项目连接的redis服务器中生成一个前缀为'autoidempotent_'的为幂等性请求服务的token,例如:
> autoidempotent_2A6BFAC4D26D4245AE79BD1026F3D767
携带此token在demo的post请求头或请求体中设置参数 IDEMPOTENT_TOKEN 的值为autoidempotent_2A6BFAC4D26D4245AE79BD1026F3D767
发起post请求到test测试效果
> POST localhost:8080/test
第一次携带幂等性token发起请求会成功返回
> 'Hello world'
继续重复发起请求会提示
> '请求失败, 重复的提交'