decoration主要是解决一些重复性行为与开发过程需要的一些基础能力
- 统一 spring mvc result
- 多返回类型,应该怎么处理
- 统一 spring mvc 异常
- 基本没有需求
- 异常结果二次处理。发送异常到其他组件(99%)
- 出书返回结果
- 隐式分页功能
- 基本完成
- 防止重复提交
- 还差 redis
- 参数校验 1.
- 单元测试
- 还差 spring mvc
- 插件
- swagger2 完成
- swagger3 未完成
- 跨域 完成
配置参数请看:com.lamp.decoration.core.spring.DecorationProperties
功能 | 配置名 | 默认开启 | 是否可以关闭 |
---|---|---|---|
整体 | 是 | 是 | |
结果处理模块 | 是 | 是 |
<dependency>
<groupId>cn.lampup</groupId>
<artifactId>decoration-core</artifactId>
<version>${version}</version>
</dependency>
decoration: { class }
声明式result object处理十分麻烦。因为申明式分页工作感觉有以下问题
- 不优雅
- 代码大量重复
- 有不少开发工作量
类型 | 行为 |
---|---|
void | 默认请求成功 |
Integer | 添加与修改方法,0是失败,大于0是成功 |
Long | 返回的结果 |
Throwable | 结果异常,返回异常 |
Enum | 返回枚举,主要是适于复杂业务的方法 |
ResultObject | 直接返回发对象,不做任何处理 |
其他结果与类型 | 直接当做结果返回 |
行为接口(com.lamp.decoration.core.result.ResultAction)
声明式异常处理造成大量的重复代码,而不对异常进行动态处理会造成异常结果不读。因为申明式分页工作感觉有以下问题
- 不优雅
- 代码大量重复
- 有不少开发工作量
声明式 | 隐士式 | decoration | |
---|---|---|---|
异常返回类,定义异常类型
public class ExceptionResult {
private String className;
/**
* 异常类
*/
private Class<?> clazz;
/**
* 返回视图类型
*/
private ExceptionResultTypeEnum resultType;
/**
* 返回code
*/
private Integer code;
/**
* 消息内容
*/
private String message;
}
public class DecorationCustomExceptionResult implements CustomExceptionResult {
ExceptionResult exceptionResult;
{
exceptionResult = new ExceptionResult();
exceptionResult.setCode(400);
exceptionResult.setMessage("系统出现异常");
exceptionResult.setResultType(ExceptionResultTypeEnum.JSON);
}
@Override
public ExceptionResult getDefaultExceptionResult() {
return exceptionResult;
}
@Override
public List<ExceptionResult> getExceptionResultList() {
return null;
}
}
public class DecorationCustomExceptionResult implements CustomExceptionResult {
ExceptionResult exceptionResult;
{
exceptionResult = new ExceptionResult();
exceptionResult.setCode(400);
exceptionResult.setMessage("系统出现异常");
exceptionResult.setResultType(ExceptionResultTypeEnum.JSON);
}
@Override
public ExceptionResult getDefaultExceptionResult() {
return exceptionResult;
}
@Override
public List<ExceptionResult> getExceptionResultList() {
return null;
}
}
隐士分页工作目前只支持mybatis,基于pagehelper组件实现,主要是解决简单业务的分页查询。因为申明式分页工作感觉有以下问题
- 不优雅
- 代码大量重复
- 有不少开发工作量
把分页参数作为请求头queryClause的value.queryClause是一个json。
字段名 | 说明 | ||
---|---|---|---|
limitPageNum | 第几页 | ||
limitStart | 第几条 | ||
limitSize | 每页大小 | ||
orderBy | 排序字段 |
- springmvc
- dubbo
- spring cloud openfeign(规划中)
同样的数据重复请求某个接口,造成数据问题的。可以使用重复提交
@DuplicateSubmission
public void overbooking(Map<String, String> parameter){
}
- 基于请求端的网络地址
- 基于传递参数
- 基于user_id + 接口名字
- token
- LocalDuplicateCheck基于ConcurrentHashMap实现。已完成
- RedisDuplicateCheck基于redis实现。未完成
- 时间锁
- 上锁与解锁
-
- ValidationUtils
- mvc单元测试
- 持久层单元测试
参数配置请看:
- Swagger2Config
参数配置请看:
- DecorationCorsConfiguration
-> 如果每个方法一个对象,那么复用性太低了。 如果公用一个对象,怎么保证简单。如何解耦
- spring mvc
- dubbo
mvn clean deploy javadoc:javadoc -P release