您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

如何优雅的处理API接口的返回数据-----附源码

时间:2019-10-08 14:05:44  来源:  作者:

API返回对象ResponseDTO<T>,包括以下部分

  • result:调用是否成功
  • code:状态码
  • msg:结果消息
  • data:响应数据,泛型<T>,可以接收任何数据类型

ResponseDTO源码如下:

package com.study.web.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ResponseDTO<T> {
 /**
 * 调用是否成功
 */
 @Builder.Default
 private boolean result = true;
 /**
 * 状态码
 */
 @Builder.Default
 private String code = "200";
 /**
 * 结果消息
 */
 @Builder.Default
 private String msg = "";
 /**
 * 响应数据
 */
 private T data;
 /** 
 * <p> 返回成功结果,无返回结果集 </p >
 * 
 * @return ResponseDTO<T>
 */
 public static <T> ResponseDTO<T> success() {
 return success(null);
 }
 /** 
 * <p> 返回成功结果,有返回结果集 </p >
 * 
 * @return ResponseDTO<T>
 */
 @SuppressWarnings("unchecked")
 public static <T> ResponseDTO<T> success(T data) {
 return ((ResponseDTO<T>) ResponseDTO.builder().result(true).code("200").msg("").data(data).build());
 }
 /** 
 * <p> 返回失败结果,无返回结果集 </p >
 * 
 * @return ResponseDTO<T>
 */
 public static <T> ResponseDTO<T> error() {
 return error(null);
 }
 /** 
 * <p> 返回失败结果,有返回结果集 </p >
 * 
 * @return ResponseDTO<T>
 */
 @SuppressWarnings("unchecked")
 public static <T> ResponseDTO<T> error(T data) {
 return ((ResponseDTO<T>) ResponseDTO.builder().result(false).data(data).build());
 }
}

示例代码:

1、无返回Data

/**
 * 无返回Data
 */
 @PostMApping("/testVoid")
 public ResponseDTO<Void> testVoid(){
 ResponseDTO<Void> result = ResponseDTO.success();
 try {
 //业务代码
 studyService.testVoid();
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }

2、返回对象

/**
 * 返回对象
 */
 @PostMapping("/testString")
 public ResponseDTO<String> testString(){
 
 ResponseDTO<String> result = ResponseDTO.success();
 try {
 //业务代码
 String data = studyService.testString();
 result.setData(data);
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }

3、返回对象列表

/**
 * 返回对象列表
 */
 @PostMapping("/testList")
 public ResponseDTO<List<String>> testList(){
 ResponseDTO<List<String>> result = ResponseDTO.success();
 try {
 //业务代码
 List<String> data = studyService.testList();
 result.setData(data);
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }

在这里我以String型来代表任何类型的对象。

建议:controller层,接口级代码,不要涉及过多业务代码,业务代码都放在service层处理并返回。

如何优雅的处理API接口的返回数据-----附源码

 

controller层源码:

package com.study.web.controller;
import JAVA.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.study.service.StudyService;
import com.study.web.dto.ResponseDTO;
import lombok.extern.slf4j.Slf4j;
@RestController
@Slf4j
@RequestMapping("/study")
public class StudyController {
 @Autowired
 StudyService studyService;
 /**
 * 无返回Data
 */
 @PostMapping("/testVoid")
 public ResponseDTO<Void> testVoid(){
 ResponseDTO<Void> result = ResponseDTO.success();
 try {
 //业务代码
 studyService.testVoid();
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }
 /**
 * 返回对象
 */
 @PostMapping("/testString")
 public ResponseDTO<String> testString(){
 ResponseDTO<String> result = ResponseDTO.success();
 try {
 //业务代码
 String data = studyService.testString();
 result.setData(data);
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }
 /**
 * 返回对象列表
 */
 @PostMapping("/testList")
 public ResponseDTO<List<String>> testList(){
 ResponseDTO<List<String>> result = ResponseDTO.success();
 try {
 //业务代码
 List<String> data = studyService.testList();
 result.setData(data);
 } catch (Exception e) {
 log.error("处理异常", e);
 result.setResult(false);
 result.setCode("500");
 result.setMsg("异常");
 }
 return result;
 }
}

service层源码:

package com.study.service;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class StudyService {
 public void testVoid(){
 }
 public String testString(){
 return null;
 }
 public List<String> testList(){
 return null;
 }
}


Tags:API接口   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言前后端分离开发模式中,api文档是最好的沟通方式。今天就来说一说如何整合Swagger生成一套漂亮、美观、实用的接口文档。 源码传送门: https://gitee.com/huoqstudy/xiliu-...【详细内容】
2021-09-08  Tags: API接口  点击:(65)  评论:(0)  加入收藏
注:商业级功能效果演示,非开源,无源码。研发基础在之前AJAX请求数据加密效果之上,更进一步,对返回数据加密。之前是单纯用于登录场景。更广泛的场景是所有此类AJAX WEB API接口。...【详细内容】
2021-09-03  Tags: API接口  点击:(75)  评论:(0)  加入收藏
在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安...【详细内容】
2021-06-10  Tags: API接口  点击:(136)  评论:(0)  加入收藏
前几天我发文就已经给各位朋友提醒过了,你们的api早就被盗了。只是没有到那些人收割的时候而已。这不我在我们公司的官方群里就看见用户分享他朋友用其他的一些量化交易机...【详细内容】
2021-06-08  Tags: API接口  点击:(129)  评论:(0)  加入收藏
今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便分享一点工作中使用它的心得缘起先说一下我为什么会使用这个工具?最近新启动一个项目,业务并不算复杂,那种典型的管理系...【详细内容】
2021-06-01  Tags: API接口  点击:(194)  评论:(0)  加入收藏
一、axios的封装在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应...【详细内容】
2020-10-12  Tags: API接口  点击:(256)  评论:(0)  加入收藏
API译者:DevOps亮哥如今,API已在软件、Web和移动应用程序开发领域无处不在,从企业内部到面向公众的应用以及与合作伙伴进行系统集成。通过使用API,开发人员可以创建满足各种客户...【详细内容】
2020-08-01  Tags: API接口  点击:(98)  评论:(0)  加入收藏
在6月中旬时,拼多多为了保障数据安全和运营信息安全,依据《拼多多开放平台开发者协议》等相关协议和规则,发布了对商家在使用API接口的时候开始收费的公告。 所谓API,百度百科...【详细内容】
2020-07-09  Tags: API接口  点击:(885)  评论:(0)  加入收藏
有没有遇到这样子的接口,放到互联网上面去,谁都可以调用,谁都可以访问,完全就是公开的,这样子的接口,如果只是普通的数据,其实可以考虑,只是可以考虑,但是,一般情况下,我们是不允许这样...【详细内容】
2020-06-20  Tags: API接口  点击:(86)  评论:(0)  加入收藏
滑动验证是网站反爬虫、反作弊的升级,滑动验证也是机器学习在反爬虫、反作弊领域的应用; 本项目也是一个简单的全栈项目,使用tornado做的后端、Bootstrap4做的前端;核心的识别...【详细内容】
2020-06-04  Tags: API接口  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条