Spring Boot接口设计
项目文件结构
编写示例代码
- 添加lombok的依赖
- 新建DemoController,用于提供RESTful接口。增加相关注解:@RestController,@RequestMapping("/demo"),@Slf4j
- 新建GetUserParam,接口传入参数实体。
- 新建DemoErrorEnum,接口返回消息和返回消息码的枚举
public enum DemoErrorEnum {
SUCCESS("操作成功", "0000"),
PARAM_NULL("参数为空", "1001"),
TOKEN_EXPIRED("token已过期", "2007"),
SERVER_ERROR("服务器异常,请稍后重试", "5001"),
;
private String code;
private String message;
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
DemoErrorEnum(String message, String code) {
this.message = message;
this.code = code;
}
public static String getErrorMsg(String code) {
for (DemoErrorEnum e : DemoErrorEnum.values()) {
if (e.getCode().equals(code)) {
return e.message;
}
}
return null;
}
}
- 新建ResultDTO,作为接口返回基类。增加相关注解:@Data,@Accessors(chain = true)。
- success:接口是否调用成功
- resultMessage:调用结果描述
- resultCode:调用结果消息码
- result:调用返回的数据
- 定义一个static的error方法,当接口失败的时候,可以直接返回一个error方法,方法内部构造具体的返回消息码和结果描述。入参为一个DemoErrorEnum的枚举。
- 定义一个static的success方法,当接口成功的时候,可以直接返回一个success方法,方法内部构造具体的返回信息,入参也是一个DemoErrorEnum的枚举。编写一个重载方法,入参为空,方法内部构造默认的响应信息。
import com.naylor.interfacedesign.domain.demo.error.DemoErrorEnum;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
public class ResultDTO<T> implements Serializable {
private boolean success;
private String resultMessage;
private String resultCode;
private T result;
public static ResultDTO error(DemoErrorEnum errorEnum) {
return new ResultDTO().setSuccess(false).setResultMessage(errorEnum.getMessage()).setResultCode(errorEnum.getCode());
}
public static ResultDTO success(DemoErrorEnum errorEnum) {
return new ResultDTO().setSuccess(true).setResultCode(errorEnum.getCode());
}
public static ResultDTO success() {
return new ResultDTO().setSuccess(true).setResultCode(DemoErrorEnum.SUCCESS.getCode()).setResultMessage(DemoErrorEnum.SUCCESS.getMessage());
}
}
- 新建UserDTO,接口返回的具体信息
- DemoController中新建getUser方法,入参为GetUserParam,返回值为ResultDTO。此接口内部逻辑大致是三部分
- 检验传入的参数是否合法
- 调用service处理具体的业务逻辑
- 检验和组装service返回的结果,并以此为依据向接口调用者返回信息。
import com.naylor.interfacedesign.domain.demo.controller.param.GetUserParam;
import com.naylor.interfacedesign.domain.demo.dto.ResultDTO;
import com.naylor.interfacedesign.domain.demo.dto.UserDTO;
import com.naylor.interfacedesign.domain.demo.error.DemoErrorEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/demo")
@Slf4j
public class DemoController {
@GetMapping("/user")
public ResultDTO<UserDTO> getUser(GetUserParam param) {
if (null == param) {
return ResultDTO.error(DemoErrorEnum.PARAM_NULL);
}
UserDTO userDTO = null;
// do something
return null != userDTO ? ResultDTO.success().setResult(userDTO) : ResultDTO.error(DemoErrorEnum.SERVER_ERROR);
}
}
Spring Boot接口设计的更多相关文章
- spring boot 框架设计步骤
spring boot 框架设计步骤: 1.poem.xml配置 2.application.yml配置 3.entiry实体 4.realm.Myrealm extends AuthorizingR ...
- spring boot 接口返回值封装
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Spring Boot如何设计防篡改、防重放攻击接口
Spring Boot 防篡改.防重放攻击 本示例要内容 请求参数防止篡改攻击 基于timestamp方案,防止重放攻击 使用swagger接口文档自动生成 API接口设计 API接口由于需要供第三方 ...
- spring boot 接口返回值去掉为null的字段
现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转 ...
- 前端页面调用Spring boot接口发生的跨域问题
最近要重构一个基于spring boot的后端API服务,需要再本地测试.在本地测试时,运行在本地的前端页面发送一个ajax请求访问后端API,然后浏览器报错blocked CORS policy. ...
- spring boot:接口站增加api版本号后的安全增强(spring boot 2.3.3)
一,接口站增加api版本号后需要做安全保障? 1,如果有接口需要登录后才能访问的, 需要用spring security增加授权 2,接口站需要增加api版本号的检验,必须是系统中定义的版本号才能访问 ...
- Spring Boot 接口幂等插件使用
幂等概述 幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质.用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的. 幂等性 ...
- spring boot 接口service有多个实现类
接口.java public interface DeService { } 接口实现类1.java @Service("ud")public class DeServiceImp ...
- spring boot 接口用例测试
接口: 测试用例:
- spring boot接口 支持https
1.拥有证书,可自己生成测试用javatool生成 keytool -keystore [keyname].jks -genkey -alias tomcat -keyalg RSA 接下来输入相关信 ...
随机推荐
- Log4Shell 漏洞披露已近一年,它对我们还有影响吗?
在 Log4Shell 高危漏洞事件披露几乎整整一年之后,新的数据显示,对全球大多数组织来说,补救工作是一个漫长.缓慢.痛苦的过程. 根据漏洞扫描领先者 Tenable 公司的遥测数据来看,截至今年1 ...
- 智能电视APP鲜时光,如何应用AB测试打造极致的用户观看体验?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 数字技术的发展让智能电视普及率大幅提升,2023年智能电视的市场渗透率已超90%,与智能电视相匹配的各类应用 ...
- 火山引擎 DataTester:5 个优化思路,构建高性能 A/B 实验平台
导读:DataTester 是由火山引擎推出的 A/B 测试平台,覆盖推荐.广告.搜索.UI.产品功能等业务应用场景,提供从 A/B 实验设计.实验创建.指标计算.统计分析到最终评估上线等贯穿整个 A ...
- 【主流技术】聊一聊 Redis 的基本结构和简单应用(一)
目录 前言 一.String 类型 二.List 类型 三.Hash 类型 四.Set 结构 五.Sort Set (Zset)结构 六.文章小结 前言 Redis 是目前互联网后端的热门中间件之一, ...
- 开放 LLM 排行榜: 深入研究 DROP
最近,开放 LLM 排行榜 迎来了 3 个新成员: Winogrande.GSM8k 以及 DROP,它们都使用了 EleutherAI Harness 的原始实现.一眼望去,我们就会发现 DROP ...
- 飞书接入ChatGPT
飞书接入ChatGPT 前天我用飞书接入了GPT-3,现在终于可以在国内畅通地聊天了. 上面是群聊截图,下面是私聊截图 其实实现过程极其简单,但是我和好兄弟确实绕了不少弯路. 首先提醒: 1 不适合个 ...
- 5 Englishi 词根
词根 1 ced/cess = go 行走 precede pre=before ced =go unprecedentedly un pre ced +ed变成adj +ly 变 ...
- 深度学习基础课:使用交叉熵损失函数和Softmax激活函数(下)
大家好~本课程为"深度学习基础班"的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序 线上课程资料: 本节课录像回放 加QQ群,获得 ...
- 理解 Kubernetes volume 和 共享存储
1. Kubernetes volume 文章 介绍了 Docker volume.与 docker volume 类似的,在 kubernetes 中存在 Pod 级别的 volume,Pod 的 ...
- 面试官:Redis持久化能关吗?怎么关?
数据持久化是指将数据从内存中,保存到磁盘或其他持久存储介质的过程,这样做的目的是为了保证数据不丢失. 而 Redis 的持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性(防止缓存雪崩.缓存 ...