项目文件结构

编写示例代码

  • 添加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接口设计的更多相关文章

  1. spring boot 框架设计步骤

    spring boot 框架设计步骤: 1.poem.xml配置 2.application.yml配置 3.entiry实体 4.realm.Myrealm extends AuthorizingR ...

  2. spring boot 接口返回值封装

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. Spring Boot如何设计防篡改、防重放攻击接口

    Spring Boot 防篡改.防重放攻击 本示例要内容 请求参数防止篡改攻击 基于timestamp方案,防止重放攻击 使用swagger接口文档自动生成 API接口设计 API接口由于需要供第三方 ...

  4. spring boot 接口返回值去掉为null的字段

    现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转 ...

  5. 前端页面调用Spring boot接口发生的跨域问题

    最近要重构一个基于spring boot的后端API服务,需要再本地测试.在本地测试时,运行在本地的前端页面发送一个ajax请求访问后端API,然后浏览器报错blocked CORS policy. ...

  6. spring boot:接口站增加api版本号后的安全增强(spring boot 2.3.3)

    一,接口站增加api版本号后需要做安全保障? 1,如果有接口需要登录后才能访问的, 需要用spring security增加授权 2,接口站需要增加api版本号的检验,必须是系统中定义的版本号才能访问 ...

  7. Spring Boot 接口幂等插件使用

    幂等概述 幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质.用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的. 幂等性 ...

  8. spring boot 接口service有多个实现类

    接口.java public interface DeService { } 接口实现类1.java @Service("ud")public class DeServiceImp ...

  9. spring boot 接口用例测试

    接口: 测试用例:

  10. spring boot接口 支持https

    1.拥有证书,可自己生成测试用javatool生成 keytool -keystore [keyname].jks -genkey -alias tomcat -keyalg RSA 接下来输入相关信 ...

随机推荐

  1. DataLeap的Catalog系统近实时消息同步能力优化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 字节数据中台DataLeap的Data Catalog系统通过接收MQ中的近实时消息来同步部分元数据.Apa ...

  2. Mac Snipaste 不仅仅是截图工具,不在菜单栏显示,怎么样修改快捷键

    官网下载: https://www.snipaste.com Snipaste 免费,支持 Windows.Mac,Windows 上的功能相当多而且,Mac 也够用了 不仅仅是个截图工具,具有强大功 ...

  3. PPT 提升素材搜索能力

    https://cn.bing.com/images 高清透明 https://unsplash.com/ 更新快 https://pixabay.com/zh/ 免费高清图片 https://www ...

  4. BBS项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建

    目录 临时评论样式渲染 文章子评论业务逻辑 后台管理页面搭建 后台管理页面模板创建 添加文章页面搭建 富文本编辑器 添加文章初步实现 添加文章功能优化 beautifulsoup模块基本使用 临时评论 ...

  5. 【POJ 2279】Mr. Young’s Picture Permutations【线性DP】

    题目: 有N个学生合影,站成左端对齐的k排,每排有 \(N-1,N_2,-N_k\)个人,第一排在最后面.学生的身高互不相同,分别为\(1-N\),并且合影时要求每一排从左往右身高递减,每一列从后往前 ...

  6. Oracle JDK7 bug 发现、分析与解决实战

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/8f34CaTp--Wz5pTHKA0Xeg作者:vivo 官网商城开发团队 众所周知,Ora ...

  7. poi 4.11版本 word模板操作

    写代码之前先说说遇到的问题,之前word模板是使用poi 3.9的包实现的,之后又写了exlce上传下载的功能使用的是poi 4.11的版本,他们之间融合的时候发现包冲突,总有一个功能不能使用,之后发 ...

  8. 密码加密bcrypt

  9. P5723 注意特殊情况

    https://www.luogu.com.cn/problem/P5723 不是难题,但是倘若忽略L<2的情况就无法AC,Lougu得分只有80.因此写完题后一定要把各种边界性质的数据想出并用 ...

  10. opensips简介

    概述 在众多的sip服务器中,主要有俩大类,一类侧重于媒体/业务服务器,比如freeswitch/asterisk,另一类侧重于代理/负载服务器,比如opensips/kamailio. 今天我们对o ...