深入浅出Spring Boot接口

news/2024/11/16 23:33:06/

如何优雅的写 Controller 层代码?
后端思想篇:设计好接口的36个锦囊!
瞧瞧,人家这后端API接口写得,那叫一个巴适~,再看看我的,像坨屎!
实战总结!18种接口优化方案的总结
SpringBoot 还在用 if 校验参数?那你真的太low了,老司机都是这么玩的!
7种方式,教你提升 SpringBoot 项目的吞吐量
Spring Boot 程序优化的 14 个小妙招!

统一返回格式

定义一个业务CODE枚举类

public enum ResultCodeEnum {SUCCESS(1, "成功"),//参数错误ILLEGAL_PARAMETER(10001, "非法参数");private Integer code;private String msg;ResultCodeEnum(Integer code, String msg) {this.code = code;this.msg = msg;}public Integer getCode() {return code;}public String getMsg() {return msg;}
}

定义统一返回类

public class R<T> implements Serializable {private T data;private Integer code;private String msg;public static <T> R<T> ok(T data) {R<T> r = new R<>();r.setData(data);return r;}public static <T> R<T> ok(ResultCodeEnum codeEnum, T data) {R<T> r = new R<>();r.setData(data);r.setCode(codeEnum.getCode());r.setMsg(codeEnum.getMsg());return r;}public static <T> R<T> fail(Integer code, String msg) {R<T> r = new R<>();r.setCode(code);r.setMsg(msg);return r;}public static <T> R<T> fail(ResultCodeEnum codeEnum) {R<T> r = new R<>();r.setCode(codeEnum.getCode());r.setMsg(codeEnum.getMsg());return r;}//省略部分代码
}

定义一个封装注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Result {
}

ResponseBodyAdvice

Allows customizing the response after the execution of an @ResponseBody or a ResponseEntity controller method but before the body is written with an HttpMessageConverter.

两种思路,一种是beforeBodyWrite,另一种是 String

全局异常处理

@RestControllerAdvice

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ControllerAdvice
@ResponseBody
public @interface RestControllerAdvice {@AliasFor(annotation = ControllerAdvice.class)String[] value() default {};@AliasFor(annotation = ControllerAdvice.class)String[] basePackages() default {};@AliasFor(annotation = ControllerAdvice.class)Class<?>[] basePackageClasses() default {};@AliasFor(annotation = ControllerAdvice.class)Class<?>[] assignableTypes() default {};@AliasFor(annotation = ControllerAdvice.class)Class<? extends Annotation>[] annotations() default {};
}

@ExceptionHandler

//修饰方法
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {//接收一个Throwable子类的class数组Class<? extends Throwable>[] value() default {};
}
    @ExceptionHandler(MethodArgumentNotValidException.class)

参数校验

性能优化


http://www.ppmy.cn/news/30.html

相关文章

抖音达人探店有用吗?算不算过时呢

其实我看到这个问题的时候也曾怀疑探店的方式真的对当下年轻人有作用吗&#xff1f;会不会有人怀疑探店达人和商家是串通好的&#xff1f;毕竟在有利益链的情况下&#xff0c;我们还能否相信仅仅靠一个视频就能知晓事物的孰好孰坏&#xff1f;今天就来为大家分析下抖音达人探店…

数据结构——顺序表

目录 一、什么是顺序表&#xff1f; 二、模拟实现顺序表 1、添加元素 2、删除元素 3、修改指定位置的元素 4、遍历 5、查看是否包含某个元素 6、查找元素下标 7、获取指定位置的元素 8、清空 三、顺序表的应用 1、杨辉三角 2、简单的洗牌 a、定义一个牌类…

Nodejs -- Express 自定义中间件并进行封装

文章目录自定义中间件1 需求描述与实现步骤2 定义中间件3 监听req的data事件4 监听req的end事件5 使用querystring模块解析请求体数据6 将解析出来的数据对象挂载为req.body7 自定义中间件8 最终代码自定义中间件 1 需求描述与实现步骤 自己手动模拟一个类似于express.urlenc…

工业服务被忽视的销售力量:他们的技术人员

目录 1.从销售到服务的普遍 2.从服务到销售的滞后 3.是什么阻碍了售后服务时销售行为的发生 3.如何改善这种状况 1.从销售到服务的普遍 服务销售窗口的提前在工业企业已经是非常普遍的现象&#xff0c;特别是在互联网经济高度发达的今天&#xff0c;销售的触角已经直达消费…

单身福利专场, Python采集某相亲网站美女数据

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 现在&#xff0c;广大年轻人到了一定年纪&#xff0c;一定会引来父母的念叨 不是让相亲就是让结婚的&#xff0c;与其父母念叨&#xff0c;不如自己找一个 到时候问起来&#xff0c;就说再接触呢~~ 今天我们就来用python…

CSS 的快乐:画一个可爱的三只小鸟 Button

做为前端工程师&#xff0c;最大的快乐之一就是可以用 CSS 画出各种有趣的效果。 比如我最近画的一个 Button&#xff1a; 画的过程中确实很开心&#xff0c;这也是我当时选择做前端的很大一部分原因。 今天我们就一起来画下这个可爱的 Button 吧&#xff01;纯 CSS&#xff…

webscoket学习

webscoket基本使用 WebSocket - Web API 接口参考 | MDN 使用node编写webscoket服务 nodejs-webscoket 在github的地址↓ GitHub - sitegui/nodejs-websocket: A node.js module for websocket server and client ws和socket.io 是wbscket的两个库 仓库地址&#xff1a;l…

【elementUI样式】模态框中的el-select下拉框不跟随页面滚动问题

文章目录1.在el-select标签中设置:popper-append-to-body"false"2.样式穿透&#xff08;比较普遍的写法&#xff09;模态框中的el-select下拉框不跟随页面滚动问题在使用elementUI写界面的时候&#xff0c;偶然遇到了如下图所示bug当页面滚动的时候&#xff0c;el-se…