# 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' 继续重复发起请求会提示 > '请求失败, 重复的提交'