当前位置: 首页 > news >正文

【java】使用springMVC优雅的响应数据

 1.抽象接口

import java.io.Serializable;
public interface IResultCode extends Serializable {String getMessage(); int getCode(); 
}

2. 利用枚举类实现接口创建对象

public enum ResultCode implements IResultCode {SUCCESS(200, "操作成功"),FAILURE(400, "业务异常"),UN_AUTHORIZED(401, "请求未授权"),NOT_FOUND(404, "404 没找到请求"),MSG_NOT_READABLE(400, "消息不能读取"),METHOD_NOT_SUPPORTED(405, "不支持当前请求方法"),MEDIA_TYPE_NOT_SUPPORTED(415, "不支持当前媒体类型"),REQ_REJECT(403, "请求被拒绝"),INTERNAL_SERVER_ERROR(500, "服务器异常"),PARAM_MISS(400, "缺少必要的请求参数"),PARAM_TYPE_ERROR(400, "请求参数类型错误"),PARAM_BIND_ERROR(400, "请求参数绑定错误"),PARAM_VALID_ERROR(400, "参数校验失败");final int code;final String message;public int getCode() {return this.code;}public String getMessage() {return this.message;}private ResultCode(final int code, final String message) {this.code = code;this.message = message;}
}

 

3.响应类

import java.io.Serializable;
import java.util.Optional;@ApiModel(description = "返回信息"
)
public class R<T> implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "状态码",required = true)private int code;@ApiModelProperty(value = "是否成功",required = true)private boolean success;@ApiModelProperty("承载数据")private T data;@ApiModelProperty(value = "返回消息",required = true)private String msg;private R(IResultCode resultCode) {this(resultCode, null, resultCode.getMessage());}private R(IResultCode resultCode, String msg) {this(resultCode, null, msg);}private R(IResultCode resultCode, T data) {this(resultCode, data, resultCode.getMessage());}private R(IResultCode resultCode, T data, String msg) {this(resultCode.getCode(), data, msg);}private R(int code, T data, String msg) {this.code = code;this.data = data;this.msg = msg;this.success = ResultCode.SUCCESS.code == code;}public static boolean isSuccess(@Nullable R<?> result) {return (Boolean)Optional.ofNullable(result).map((x) -> {return ObjectUtils.nullSafeEquals(ResultCode.SUCCESS.code, x.code);}).orElse(Boolean.FALSE);}public static boolean isNotSuccess(@Nullable R<?> result) {return !isSuccess(result);}public static <T> R<T> data(T data) {return data(data, "操作成功");}public static <T> R<T> data(T data, String msg) {return data(200, data, msg);}public static <T> R<T> data(int code, T data, String msg) {return new R(code, data, data == null ? "暂无承载数据" : msg);}public static <T> R<T> success(String msg) {return new R(ResultCode.SUCCESS, msg);}public static <T> R<T> success(IResultCode resultCode) {return new R(resultCode);}public static <T> R<T> success(IResultCode resultCode, String msg) {return new R(resultCode, msg);}public static <T> R<T> fail(String msg) {return new R(ResultCode.FAILURE, msg);}public static <T> R<T> fail(int code, String msg) {return new R(code, (Object)null, msg);}public static <T> R<T> fail(IResultCode resultCode) {return new R(resultCode);}public static <T> R<T> fail(IResultCode resultCode, String msg) {return new R(resultCode, msg);}public static <T> R<T> status(boolean flag) {return flag ? success("操作成功") : fail("操作失败");}public int getCode() {return this.code;}public boolean isSuccess() {return this.success;}public T getData() {return this.data;}public String getMsg() {return this.msg;}public void setCode(final int code) {this.code = code;}public void setSuccess(final boolean success) {this.success = success;}public void setData(final T data) {this.data = data;}public void setMsg(final String msg) {this.msg = msg;}public String toString() {return "R(code=" + this.getCode() + ", success=" + this.isSuccess() + ", data=" + this.getData() + ", msg=" + this.getMsg() + ")";}public R() {}
}

 

相关文章:

  • 【Spring连载】使用Spring Data访问 MongoDB(十一)----加密Encryption (CSFLE)
  • 【加密算法】AES对称加密算法简介
  • 基于smilehappiness-framework-base,快速集成ShardingSphere JDBC
  • 请求包的大小会影响Redis每秒处理请求数量
  • linux部署nginx
  • 【JavaEE】_tomcat的安装与使用
  • Android Gradle 开发与应用 (一) : Gradle基础
  • spring Boot快速入门
  • Java MP3转PCM
  • 一文读懂什么是HTTPS检查
  • linux centos7.9改dns和ip
  • 【rust】vscode下rust-analyzer和Rust Test Lens的Lens
  • windows11本地深度学习环境搭建Anacond,keras,tensorflow,pytorch, jupyter notebook
  • apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$@“
  • 【卡码网】完全背包问题 52. 携带研究材料——代码随想录算法训练营Day44
  • 「译」Node.js Streams 基础
  • AWS实战 - 利用IAM对S3做访问控制
  • C++入门教程(10):for 语句
  • dva中组件的懒加载
  • E-HPC支持多队列管理和自动伸缩
  • Hexo+码云+git快速搭建免费的静态Blog
  • JS 面试题总结
  • Laravel Mix运行时关于es2015报错解决方案
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PHP的Ev教程三(Periodic watcher)
  • Redis学习笔记 - pipline(流水线、管道)
  • Service Worker
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 来,膜拜下android roadmap,强大的执行力
  • 力扣(LeetCode)22
  • 聊聊flink的BlobWriter
  • 嵌入式文件系统
  • 少走弯路,给Java 1~5 年程序员的建议
  • 小而合理的前端理论:rscss和rsjs
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Prometheus VS InfluxDB
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 整理一些计算机基础知识!
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • (python)数据结构---字典
  • (二)pulsar安装在独立的docker中,python测试
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)Honghu Cloud云架构一定时调度平台
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) ns2/nam与nam实现相关的文件
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ./和../以及/和~之间的区别
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试