您现在的位置是:亿华云 > 域名
你会全局统一格式返回吗?
亿华云2025-10-09 01:33:48【域名】1人已围观
简介本文转载自微信公众号「java后端指南」,作者KING鹏哥 。转载本文请联系java后端指南公众号。相信全局统一格式返回这个东西在每个项目中都非常重要的,前端需要一个统一的格式给前端,所以我们后端需要
本文转载自微信公众号「java后端指南」,局统作者KING鹏哥 。格式转载本文请联系java后端指南公众号。局统
相信全局统一格式返回这个东西在每个项目中都非常重要的格式,前端需要一个统一的局统格式给前端,所以我们后端需要封装好结构给前端。格式
1结构
我目前接触的局统结构基本上是这样的香港云服务器。
{ "code":"0",格式 "msg":"请求正常", "data":{ } }2实现
创建一个统一返回前端的实体类
public class R extends HashMap<String, Object> { private static final long serialVersionUID = 1L; /** * 状态码 */ public static final String CODE_TAG = "code"; /** * 返回内容 */ public static final String MSG_TAG = "msg"; /** * 数据对象 */ public static final String DATA_TAG = "data"; /** * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。局统 */ public R() { } /** * 初始化一个新创建的格式 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 */ public R(String code, String msg) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); } /** * 初始化一个新创建的 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 * @param data 数据对象 */ public R(String code, String msg, Object data) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); if (null!=data) { super.put(DATA_TAG, data); } } /** * 方便链式调用 * * @param key * @param value * @return */ @Override public R put(String key, Object value) { super.put(key, value); return this; } /** * 返回成功消息 * * @return 成功消息 */ public static R success() { return R.success("操作成功"); } /** * 返回成功数据 * * @return 成功消息 */ public static R success(Object data) { return R.success("操作成功", data); } /** * 返回成功消息 * * @param msg 返回内容 * @return 成功消息 */ public static R success(String msg) { return R.success(msg, null); } /** * 返回成功消息 * * @param msg 返回内容 * @param data 数据对象 * @return 成功消息 */ public static R success(String msg, Object data) { return new R("0", msg, data); } /** * 返回错误消息 * * @return */ public static R error() { return R.error("操作失败"); } /** * 返回错误消息 * * @param msg 返回内容 * @return 警告消息 */ public static R error(String msg) { return R.error("-1", msg); } /** * 返回错误消息 * * @param msg 返回内容 * @param data 数据对象 * @return 警告消息 */ public static R error(String msg, Object data) { return new R("-1", msg, data); } /** * 返回错误消息 * * @param code 状态码 * @param msg 返回内容 * @return 警告消息 */ public static R error(String code, String msg) { return new R(code, msg, null); } }3异常处理
正常情况下的返回结构已经弄好了,异常情况下我们也要做处理的云南idc服务商局统。
首先新建几个异常类,格式根据实际需要创建。局统
/** * 基本异常 */ @Getter public class BaseException extends RuntimeException { private static final long serialVersionUID = 1L; /** * 所属模块 */ private final String module; /** * 错误码 */ private final String code; /** * 错误码对应的格式参数 */ private final Object[] args; /** * 错误消息 */ private final String message; public BaseException(String module, String code, Object[] args, String message) { this.module = module; this.code = code; this.args = args; this.message = message; } public BaseException(String module, String code, Object[] args) { this(module, code, args, null); } public BaseException(String module, String defaultMessage) { this(module, null, null, defaultMessage); } public BaseException(String code, Object[] args) { this(null, code, args, null); } public BaseException(String module, String code, String message) { this(null, code, null, message); } public BaseException(String message) { this(null, null, null, message); } public String getCode() { return code; } public String getMsg() { return message; } public Object[] getArgs() { return args; } public String getDefaultMessage() { return getMessage(); } } /** * 自定义异常 */ public class CustomException extends RuntimeException { private static final long serialVersionUID = 1L; private String code; private final String message; public CustomException(String message) { this.message = message; } public CustomException(String message, String code) { this.message = message; this.code = code; } public CustomException(String message, Throwable e) { super(message, e); this.message = message; } @Override public String getMessage() { return message; } public String getCode() { return code; } }我就创建了两个异常类。
4创建全局异常拦截器
@RestControllerAdvice @Slf4j public class GlobalExceptionHandler { /** * 基础异常 */ @ExceptionHandler(BaseException.class) public R baseException(BaseException e) { return R.error(e.getDefaultMessage()); } /** * 业务异常 */ @ExceptionHandler(CustomException.class) public R businessException(CustomException e) { if (StringUtils.isNotBlank(e.getCode())) { return R.error(e.getMessage()); } return R.error("-1",局统 e.getMessage()); } @ExceptionHandler(Exception.class) public R handleException(Exception e) { log.error(e.getMessage(), e); return R.error(String.format("未知错误%s",e.getMessage())); } }其中状态码我们可以单独定义一个类,我为了方便就不写了。
5测试
@RestController public class TestAction { @RequestMapping("/test") public R test(){ return R.success("请求成功",null); } @RequestMapping("/test2") public R test2(){ Student student=new Student(); student.setName("king"); student.setPassword("123456"); return R.success(student); } @RequestMapping("/test3") public R test3(){ return R.error("请求失败"); } @RequestMapping("/test4") public R test4(){ throw new CustomException("失败了"); } @RequestMapping("/test5") public R test5() throws Exception { throw new Exception("失败了"); } }大家可以自己去看看,如果有问题欢迎来骚扰我。
视频讲解:https://www.bilibili.com/video/BV1e341117av/
站群服务器很赞哦!(81274)
相关文章
- 域名不仅仅是一个简单的网站。对于有长远眼光的公司来说,在运营网站之前确定一个优秀的域名对有长远眼光的公司来说是非常重要的。这对今后的市场营销、产品营销和企业品牌建设都具有十分重要的意义。优秀的域名是企业在市场竞争中获得持久优势的利器。
- 为什么用Dubbo而不是Spring Cloud?基于支付场景的微服务高可用架构实战
- 不到200行JavaScript代码如何实现富文本编辑器
- Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
- 什么样的邮箱才是安全的电子邮件地址?
- 一个三年工作经验的Web工程师的经验之谈
- 当你和天猫精灵对话时,它在想什么?阿里智能对话技术深度解读
- 途牛被爆裁员400研发人员,惊呼遭血洗
- 国际域名转移的费用和处理步骤是什么?
- Chrome 66 禁止声音自动播放,开发怎么应对?