【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() {}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

input框 自动获取焦点

<el-input style"width:200px" autofocus v-model"leftListname"></el-input> element-ui 的 el-input 组件的 autofocus 属性在某些情况下不能实现自动聚焦,有几个可能的原因: 1. autofocus 在移动设备上不被支持。如果是在移动设备上访问,au…

题目 1311: 数字三角形

题目描述: 示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径&#xff0c;使该路径所经过的数字的总和最大。  每一步可沿左斜线向下或右斜线向下走&#xff1b;  1< 三角形行数< 25&#xff1b;  三角形中的数字为整数< 1000&#xff1b; 代码…

Redis 发布订阅详解

Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis 有两种发布订阅模式 基于频道&#xff08;Channel&#xff09;的发布订阅基于模式&#xff…

ChatGPT学习第三周

&#x1f4d6; 学习目标 ChatGPT在各行各业的应用 探索ChatGPT在不同领域&#xff08;如教育、客户服务等&#xff09;的实际应用案例。 ChatGPT的局限性和挑战 讨论ChatGPT面临的挑战&#xff0c;包括偏见、误解及其限制。 ✍️ 学习活动 学习资料 《人工智能通用大模型(…

openssl3.2 - exp - buf to bio

文章目录 openssl3.2 - exp - buf to bio概述笔记bio_get_length调用端代码函数实现bio_to_buffer END openssl3.2 - exp - buf to bio 概述 不想让程序调用openssl API时, 有文件落地的动作. 如果程序有配置文件要用, 也是自己读文件到buffer, 然后转成BIO给openssl的相关有…

Vue3学习——路由prop配置、replace

写法一 在路由中可直接写prop: true&#xff0c;即可在页面中defineProps使用 相当于&#xff08;<Detail id“1” name“2” />&#xff09;,但只能是params {path: /service,name: 服务,component: () > import(../views/Service/index)&#xff0c;props: true}…

SQLlabs46关

看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username&#xff1a; passward 可以看到顺序是不同的&#xff0c;当然第一列第二列第三列也可以&#xff0c;基本上都是这个原理&#xff0c;那怎么去实现注入呢&#xff0c;我…

TypeScript与JavaScript 的区别

TypeScript 与 JavaScript 的区别&#xff1a; TypeScript Microsoft 在编译期间可以检查和修复错误 强类型&#xff0c;支持静态和动态类型 将代码转换为JavaScript&#xff0c;需要编译 支持模块、泛型、接口 没有庞大的开发人员社区 .ts和.tsx JavaScript Netscape&…

本地复制文本无法在Ubuntu终端中粘贴问题

在公司&#xff0c;安装Ubuntu环境后无法粘贴。 查询并自己实践后&#xff0c;解决方法如下&#xff1a; 1. sudo apt-get autoremove open-vm-tools 2. sudo apt-get install open-vm-tools-desktop 3.重启虚拟机 又可以愉快的复制粘贴了

【GPTs分享】GPTs分享之Write For Me

Write For Me 是一个专门定制的GPT版本&#xff0c;旨在为用户提供高质量的文本内容创作服务。它适用于各种写作需求&#xff0c;从商业计划、学术文章到创意故事等。下面是从简介、主要功能、使用案例、优点和局限性几个方面对Write For Me 的详细介绍。 简介 Write For Me …

Java 学习和实践笔记(22):package(包机制)、JDK常见的包、类的导入

前面学的类&#xff0c;每创建一个类&#xff0c;在电脑上就是创建了一个对应的类文件。而package 相当于文件夹对文件的管理作用。主要用于管理类、用于解决类的重名问题。这个含义很简单。因为实际的程序&#xff0c;类可能有成千上万个&#xff0c;这样就需要把不同功能的类…

「连载」边缘计算(十九)02-22:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 从启动函数Start(&#xff09;中可以看到&#xff0c;其以go routine的方式启动很多后台处理服务&#xff0c;具体如下。 1&#xff09;初始化edged的kubeClient&#xff0c;具体如下所示。 // use self defined client to replace fake kube…

JDK5.0新增线程的两种方式

本文主要是了解&#xff0c;并没有进入深入学习&#xff0c;JUC时才会深入学习 8.1新增方式一&#xff1a;实现Callable接口 ~与使用Runable相比&#xff0c;Callable功能更强大些 -- 相比run&#xff08;&#xff09;方法&#xff0c;可以有返回值 ---方法可以抛出异常 -…

LeetCode刷题--- 环形子数组的最大和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

CSDN的AI创作助手

CSDN用到的AI创作助手详细介绍 CSDN&#xff08;中国软件开发者网&#xff09;是一个面向IT技术人员的综合性技术社区&#xff0c;提供技术问答、博客文章、开发工具等内容。AI创作助手是CSDN提供的一项人工智能服务&#xff0c;旨在帮助用户快速高效地创作文章。 AI创作助手基…

设计模式(十) - 工厂方式模式

前言 在此前的设计模式&#xff08;四&#xff09;简单工厂模式中我们介绍了简单工厂模式&#xff0c;在这篇文章中我们来介绍下工厂方法模式&#xff0c;它同样是创建型设计模式&#xff0c;而且又有些类似&#xff0c;文章的末尾会介绍他们之间的不同。 1.工厂方法模式简介 …

C# TesseractOCR识别身份证号

https://github.com/tesseract-ocr/tessdata 新建控制台项目并添加包 Tesseract和Tesseract.Drawing 下载训练的模型 地址 代码实现 using Tesseract;var filePath "F:\\Desktop\\韦小宝.png"; var exePath AppDomain.CurrentDomain.BaseDirectory; var …

机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案

一、市场应用背景 汇流焊是光伏太阳能电池板中段加工工艺&#xff0c;其前道工序为串焊&#xff0c;在此环节流程中&#xff0c;需要在多个太阳能电池片表面以平行方式串焊多条焊带&#xff0c;形成电池串。串焊好的多组电池串被有序排列输送到汇流焊接工作台&#xff0c;通过…

接受回调函数的函数

直接上代码 const oneWord function (str) {return str.replace(/ /g, ).toLowerCase(); };const upperFirstWorld function (str) {const [first, ...others] str.split( );return [first.toUpperCase(), ...others].join( ); };// 高阶函数 const transformer function …

SQL进阶(二):复杂数据结构处理:让你的 SQL 更加高效

复杂数据结构处理&#xff1a;让你的 SQL 更加高效&#xff0c;以SQLite为例 本文是在原本sql闯关的基础上总结得来&#xff0c;加入了自己的理解以及疑问解答&#xff08;by GPT4&#xff09; 原活动链接 用到的数据&#xff1a;链接 提取码&#xff1a;l03e 目录 0.课前小问…