【Easy云盘 | 第二篇】后端统一设计思想

2024-04-08 05:28

本文主要是介绍【Easy云盘 | 第二篇】后端统一设计思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

    • 4.1后端统一设计思想
      • 4.1.1后端统一返回格式对象
      • 4.1.2后端统一响应状态码
      • 4.1.3后端统一异常处理类
      • 4.1.4StringUtils类
      • 4.1.5 RedisUtils类

4.1后端统一设计思想

4.1.1后端统一返回格式对象

  • com.easypan.entity.vo.ResponseVO
@Data
public class ResponseVO<T> {private String status;private Integer code;	//响应状态码private String info;	//响应消息private T data;			//响应数据
}

4.1.2后端统一响应状态码

  • com.easypan.entity.enums.ResponseCodeEnum
public enum ResponseCodeEnum {CODE_200(200, "请求成功"),CODE_404(404, "请求地址不存在"),CODE_600(600, "请求参数错误"),CODE_601(601, "信息已经存在"),CODE_500(500, "服务器返回错误,请联系管理员"),CODE_901(901, "登录超时,请重新登录"),CODE_902(902, "分享连接不存在,或者已失效"),CODE_903(903, "分享验证失效,请重新验证"),CODE_904(904, "网盘空间不足,请扩容");private Integer code;	//状态码private String msg;		//状态码对应的信息ResponseCodeEnum(Integer code, String msg) {this.code = code;this.msg = msg;}public Integer getCode() {return code;}public String getMsg() {return msg;}
}

4.1.3后端统一异常处理类

  • com.easypan.exception.BusinessException
@Data
@AllArgsConstructor
public class BusinessException extends RuntimeException {private ResponseCodeEnum codeEnum;  //后端统一响应状态码private Integer code;               //自定义code值private String message;             //自定义消息public BusinessException(String message, Throwable e) {super(message, e);this.message = message;}public BusinessException(String message) {super(message);this.message = message;}public BusinessException(Throwable e) {super(e);}/*** @Description: 根据指定codeEnum创建Exception对象*/public BusinessException(ResponseCodeEnum codeEnum) {super(codeEnum.getMsg());this.codeEnum = codeEnum;this.code = codeEnum.getCode();this.message = codeEnum.getMsg();}/*** @Description: 自定义code、message来创建Exception对象*/public BusinessException(Integer code, String message) {super(message);this.code = code;this.message = message;}/*** 重写fillInStackTrace 业务异常不需要堆栈信息,提高效率.*/@Overridepublic Throwable fillInStackTrace() {return this;}}

4.1.4StringUtils类

  • com.easypan.utils.StringUtils
public class StringUtils {public static String encodeByMD5(String originString) {return StringUtils.isEmpty(originString) ? null : DigestUtils.md5Hex(originString);}public static boolean isEmpty(String str) {if (null == str || "".equals(str) || "null".equals(str) || "\u0000".equals(str)) {return true;} else if ("".equals(str.trim())) {return true;}return false;}public static String getFileSuffix(String fileName) {Integer index = fileName.lastIndexOf(".");if (index == -1) {return "";}String suffix = fileName.substring(index);return suffix;}public static String getFileNameNoSuffix(String fileName) {Integer index = fileName.lastIndexOf(".");if (index == -1) {return fileName;}fileName = fileName.substring(0, index);return fileName;}public static String rename(String fileName) {String fileNameReal = getFileNameNoSuffix(fileName);String suffix = getFileSuffix(fileName);return fileNameReal + "_" + getRandomString(Constants.LENGTH_5) + suffix;}public static final String getRandomString(Integer count) {return RandomStringUtils.random(count, true, true);}public static final String getRandomNumber(Integer count) {return RandomStringUtils.random(count, false, true);}public static String escapeTitle(String content) {if (isEmpty(content)) {return content;}content = content.replace("<", "&lt;");return content;}public static String escapeHtml(String content) {if (isEmpty(content)) {return content;}content = content.replace("<", "&lt;");content = content.replace(" ", "&nbsp;");content = content.replace("\n", "<br>");return content;}public static boolean pathIsOk(String path) {if (StringUtils.isEmpty(path)) {return true;}if (path.contains("../") || path.contains("..\\")) {return false;}return true;}
}

4.1.5 RedisUtils类

  • com.easypan.utils.RedisUtils
@Slf4j
@Component("redisUtils")
public class RedisUtils<V> {@Resourceprivate RedisTemplate<String, V> redisTemplate;/*** 普通缓存放入* @param key   键* @param value 值* @return true成功 false失败*/public boolean set(String key, V value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {log.error("设置redisKey:{},value:{}失败", key, value);return false;}}/*** 普通缓存放入并设置时间** @param key   键* @param value 值* @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期* @return true成功 false 失败*/public boolean setex(String key, V value, long time) {try {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}return true;} catch (Exception e) {log.error("设置redisKey:{},value:{}失败", key, value);return false;}}//获取指定key的value值public V get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 删除缓存,key 可以传一个值 或多个*/public void delete(String... key) {if (key != null && key.length > 0) {if (key.length == 1) {redisTemplate.delete(key[0]);} else {redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));}}}
}

在这里插入图片描述

这篇关于【Easy云盘 | 第二篇】后端统一设计思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/884680

相关文章

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm