从0到1搭建前后端分离的脚手架框架之后端(一)统一返回信息封装
2020-01-14 16:34
253 查看
第一次写博客,希望通过博客来记录一下自己的学习过程,希望借此来巩固编程技能, 想了很久决定从0到1搭建一个前后端分离的管理后台脚手架,后端基于
Sptringboot搭建, 前端基于
angular ng-alain搭建.
作为前后端分离项目需要规范返回数据结构,通常情况下返回的数据结构包含状态码和描述信息和操作数据
- 成功时返回信息:
{ "code": 0, "message": "success", "result": { "username": "test", "likeName": "aaaa" } }
对应的java代码为:
public class RestResponse<T> implements Serializable { private static final long serialVersionUID = 7545652265259278927L; private Integer code; private String message; private T result; public RestResponse(Integer code, String message) { this.code = code; this.message = message; } public RestResponse() { this(GlobalCode.SUCCESS.getCode(), GlobalCode.SUCCESS.getText()); } public static <T> RestResponse<T> success(T result) { RestResponse<T> response = new RestResponse<>(); response.setResult(result); return response; } public static <T> RestResponse<T> error(RestCode code) { return new RestResponse<>(code.getCode(),code.getText()); } }
通过静态方法快速生成成功和失败的返回信息,其中
restCode为一个接口,该接口继承了BaseEnum接口, 所有返回状态码都继承
RestCode接口, 把不同的业务码通过不同Enum来封装.
public interface RestCode extends BaseEnum<Integer> { }
公用的状态码通过
GlobalCode来封装
public enum GlobalCode implements RestCode { /**全局状态码*/ SUCCESS(0, "Success"), ; private Integer code; private String text; }
为了能够方便的操作枚举,项目中所有枚举类型都必须继承BaseEnum接口, BaseEnum对象封装了操作枚举的常规方法.
public interface BaseEnum<V> { V getCode(); String getText(); static <T extends Enum & BaseEnum> Optional<T> find(Class<T> type, Predicate<T> predicate) { if (type.isEnum()) { return Arrays.stream(type.getEnumConstants()) .filter(predicate).findFirst(); } return Optional.empty(); } static <T extends Enum & DictEnum<?>> Optional<T> findOptionalByCode(Class<T> type, Object code) { return find(type, e -> e.getCode() == code || e.getCode().equals(code) || String.valueOf(e.getCode()).equalsIgnoreCase(String.valueOf(code))); } // ....... }
其中
findOptionalByCode方法是根据返回码获取到对应的枚举类型.
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 从0到1搭建前后端分离的脚手架框架之后端(二) 统一异常处理
- 从0到1搭建前后端分离的脚手架框架之后端(七)JPA整合
- 从0到1搭建前后端分离的脚手架框架之后端(六) 鉴权
- 从0到1搭建前后端分离的脚手架框架之后端(五) 基于Caffeine的缓存实现
- 从0到1搭建前后端分离的脚手架框架之后端(四) JWT TOKEN 整合
- 从0到1搭建前后端分离的脚手架框架之后端(三) 参数校验
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之八MemoryCache与redis缓存的使用...
- Vue .Net 前后端分离框架搭建
- 搭建spring-boot+vue前后端分离框架并实现登录功能
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之六 || API项目整体搭建 6.1 仓储
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之七 || API项目整体搭建 6.2 轻量级ORM
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十二Swagger(参数)使用二
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之四Nlog记录日志至数据库
- 从MVC到前后端分离(Rest框架搭建)
- 自定义统一api返回json格式(app后台框架搭建三)
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之二autofac解耦
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之九如何进行用户权限控制
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十一Swagger使用一
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之二autofac解耦...