SpringbootAPI接口统一输出消息格式保持原接口返回值不变
环境:Springboot2.4.11
很多时候我们对接口的返回值都会做统一的处理,返回{code, message,data}等信息标识本次请求的处理结果,这统一的处理也都是在各自的Controller上做自行的处理。本篇内容告诉你如何通过ResponseBodyAdvice对象来实现对结果的统一处理,也就是说在Controller上我们不再对返回结果进行处理了,而是由统一的一个ControllerAdice Bean对象进行处理。这对我们的Controller接口来说可读性更强,也业务无关的东西一概不出现,同时代码也更加简洁。ResponseBodyAdvice是什么
ResponseBodyAdvice类型的Bean对象允许在执行@ResponseBody或ResponseEntity控制器方法之后但在使用HttpMessageConverter写入正文之前自定义响应。实现可以直接向RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver注册,或者更可能使用@ControllerAdvice进行注释,在这种情况下,它们都将被自动检测到。定义统一返回对象public class R { public R() { } private int code ; private String message ; private Object result ; private String errorDetails ; public R(int code, String message, Object result) { super(); this.code = code; this.message = message; this.result = result; } public R(int code, String message, Object result, String errorDetails) { super(); this.code = code; this.message = message; this.result = result; this.errorDetails = errorDetails ; } public R(int code, String message, String errorDetails) { super(); this.code = code; this.message = message; this.errorDetails = errorDetails ; } public R(int code, String message) { super(); this.code = code; this.message = message; } public static R success() { return success(null) ; } public static R success(Object data) { return success("成功", data) ; } public static R success(String message, Object data) { return new R(ResultCode.SUCCESS, message, data) ; } public static R failure() { return failure("失败") ; } public static R failure(Object data) { return failure("失败", data) ; } public static R failure(String message) { return failure(message, null) ; } public static R failure(int code, String message) { return new R(code, message) ; } public static R failure(String message, Object data) { return new R(ResultCode.FAILURE, message, data) ; } public static R failure(String message, String errorDetails) { return new R(ResultCode.FAILURE, message, errorDetails) ; } public static R error(String message, String errorDetails) { return new R(ResultCode.ERROR, message, errorDetails) ; } public static interface ResultCode { int SUCCESS = 0 ; int FAILURE = -1 ; int ERROR = 500 ; } }定义ResponseBodyAdvice@RestControllerAdvice public class ResponseResultControllerAdvice implements ResponseBodyAdvice
SSD逃不过掉速?这类SSD最好不要买SSD寿命不太行容易掉速应该每个人都有所耳闻。电脑卡顿经常蓝屏开机速度游戏加载速度变慢,硬盘跑分也确实慢了不少,难道真是SSD固态硬盘掉速了?不行了?其实只要不是特别拉胯的SSD,
何伟文阴谋论挡不住外企对华用脚投票来源环球时报路透社近日引述知情人士消息称,美国电商巨头亚马逊约两年前应中方要求,对中国平台上的书评做了限制。路透社称,亚马逊这样做是为了讨好中国。路透社是在为亚马逊抱打不平,还是在
高频面试题请聊一下JVM中堆和栈的区别上一回我们说完了JVM的内存结构,将JVM中有哪些元素已经搞清了。今天就再根据之前的主题接着延伸出一个更容易被面试官问到的题目。堆和栈的区别!这次我们就从以下几个方面说一说有什么不
马上评车企门店偷脸43万张,出门真的要戴头盔了?澎湃特约评论员任然你能想象,逛逛街看看车,脸就被偷了吗?据报道,日前,上海小鹏汽车销售服务有限公司被徐汇区市场监督管理局罚款10万元。处罚事由为,当事人购买具有人脸识别功能的摄像设
golang面试题1。golang中make和new的区别make和new是两个内置函数,主要用来创建并分配内存。make只用于分配或初始化mapslicechannel的数据类型,返回不是指针类型
Python入门精华eval()eval()函数1。函数原型eval(expression,globals,locals)expression表达式globals变量作用域,全局命名空间,如果被提供,则必须是一个
Python入门精华OOP创建可管理的属性(property)为类创建可管理的属性概述我们可以在实例属性的获取和设定上增加一些额外的功能,比如在设定时增加类型的检查解决方案要自定义对属性的访问,一种简单的方式是将其定义为property,增加
柳传志整人手段究竟有多狠?被插刀的任正非还得帮他洗白在司马南的穷追不舍之下,最近联想集团终于发出了官方的回应。搞出了一个内网声明,关上门在家里,自说自话,自证清白,说大家放心,自己没有问题。既当选手又当裁判,这份粗糙的声名,又能有多
苹果上线数字遗产网络世界留下的足迹能继承?来源北京日报苹果上线数字遗产功能网络世界留下的足迹能继承吗?本报记者赵莹莹12月15日起,苹果用户陆续接收到iOS15。2的更新推送,其中一项新变化是数字遗产功能正式上线,被指定的
10001500元手机选购攻略,5G网络大内存大电池1亿像素相机热门手机数码资讯早知道,快来关注作者。编辑孙凤新审核文峥对于大多数手机用户来说,千元档5G手机不仅价格实惠,性能也能够满足日常使用需求。今天为大家介绍几款10001500元的热门手
人民日报批虚假广告滥用极限词规范网络电商广告用语全网仅一家史上最低价销量总冠军行业领导者打开互联网平台的商品页直播间,广告极限词并不鲜见。一些消费者被类似广告吸引,购买商品或服务后却发现名不副实,既影响体验也面临维权难题。滥用广