boot返回码规范 spring_sprigboot-new-coding-standards
sprigboot-new-coding-standards
介绍
SpringBoot脚手架,遵守严格的代码规范。
规范详细说明
1.遵循标准RESTful API
2.异常采用枚举进行封装(业务内部异常往上抛,返回客户端需要将对应的异常转换为具体的状态的,这里介绍Spring提供的全局异常处理)
package org.niugang.coding.advice;
import lombok.extern.slf4j.Slf4j;
import org.niugang.coding.enums.ExceptionEnum;
import org.niugang.coding.exception.ServiceException;
import org.niugang.coding.vo.ExceptionResult;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.validation.ConstraintViolationException;
import java.util.HashMap;
import java.util.Map;
/**
* 全部异常处理
*
* @author Created by niugang on 2018/12/26/12:19
*/
@ControllerAdvice
@Slf4j
public class BasicExceptionHandler {
/**
* 具体业务层异常
*
* @param e 业务异常
* @return ResponseEntity
*/
@ExceptionHandler(ServiceException.class)
public ResponseEntity handleException(ServiceException e) {
/**
* 响应的状态码,为枚举中定义的状态码
*/
return ResponseEntity.status(e.getExceptionEnum().value())
.body(new ExceptionResult(e.getExceptionEnum()));
}
/**
* 业务处理未知异常
*
* @param e 异常
* @return ResponseEntity
*/
@ExceptionHandler(Exception.class)
public ResponseEntity> exceptionResultResponseEntity(Exception e) {
//所有参数异常
//在对象上绑定校验如(UserDTO)
if (e instanceof BindException || e instanceof MethodArgumentNotValidException || e instanceof IllegalArgumentException) {
log.error("参数校验失败:{}", e);
return ResponseEntity.status(ExceptionEnum.PARAMS_VALIDATE_FAIL.value())
.body(new ExceptionResult(ExceptionEnum.PARAMS_VALIDATE_FAIL));
}
//方法上参数校验失败
if (e instanceof ConstraintViolationException) {
ConstraintViolationException ex = (ConstraintViolationException) e;
Map res = new HashMap<>(16);
res.put("status", HttpStatus.BAD_REQUEST.value());
res.put("message", ex.getMessage());
res.put("timestamp", System.currentTimeMillis());
return ResponseEntity.status(HttpStatus.BAD_REQUEST.value()).body(res);
}
log.error("服务器内部异常:{}", e);
/*
* 响应的状态码,为枚举中定义的状态码
*/
return ResponseEntity.status(ExceptionEnum.BUSINESS_DEAL_FAIL.value())
.body(new ExceptionResult(ExceptionEnum.BUSINESS_DEAL_FAIL));
}
}
value 对应响应状态码
message 错误描述
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {
/**
*
*/
PARAMS_VALIDATE_FAIL(400, "'参数校验失败"),
BUSINESS_DEAL_FAIL(500, "'业务处理失败");
/**
* 响应状态码
*/
int value;
/**
* 响应描述
*/
String message;
public int value() {
return this.value;
}
public String message() {
return this.message;
}
}
参数错误对应400状态码
3.遵循严格的pojo,vo,dto(来自阿里java规范)
4.建议提倡使用lomback(让你的代码,更加简洁,干净)
5.对于日志记录采用@Slf4j
以前可能是:
private static final Logger logger = LoggerFactory.getLogger(MeetingInfoController.class);
6.对于响应采用ResponseEntity,Spring已经封装好的,在一定程度上是能满足业务场景的
@PostMapping
public ResponseEntity save(@Valid @RequestBody UserDTO userDTO) {
userService.insert(userDTO);
return ResponseEntity.ok().build();
}
7.RESTful API对应以下Spring请求注解
@GetMapping 查询
@PostMapping 新增
@PutMapping 修改
@DeleteMapping 删除
8.进行必要的参数校验,新增参数校验,普通查询也有必要,如分页查询pageSize不做限制可能导致数据查询异常或慢查询
9.建议直接只用框架自带封装好的API,如RedisTemplate,RabbitTemplate,KafkaTemplate(自己写的通用的可能某些地方考虑不全)
10.使用注解事务@Transactional
import org.springframework.transaction.annotation.Transactional;
//spring的注解不是java注解
软件架构
软件架构说明
安装教程
xxxx
xxxx
xxxx
使用说明
xxxx
xxxx
xxxx
参与贡献
Fork 本仓库
新建 Feat_xxx 分支
提交代码
新建 Pull Request
码云特技
使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
boot返回码规范 spring_sprigboot-new-coding-standards相关推荐
- boot返回码规范 spring_SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
200105-SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势 虽然 http 的提供了一整套完整.定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则 ...
- boot返回码规范 spring_springboot项目编码规范
1.统一返回消息体规范 /** * 用户信息接口 * @return */ @ApiOperation(value = "用户信息接口", notes = "用户信息接口 ...
- boot返回码规范 spring_三种自定义SpringBoot返回的状态码
关于如何自定义SpringBoot返回的状态码 关于HttpStatus 在SpringBoot中关于状态码有一个枚举类型,如下. public enum HttpStatus { CONTINUE( ...
- boot返回码规范 spring_SpringBoot自定义异常体系和错误码规范定义(个人经验总结)...
前言 本文说的自定义异常指的是继承了RuntimeException,专门用于Spring全局异常捕获处理的自定义异常类型,需要应用程序显示捕获并处理的异常不在本次讨论范围内. 本随笔经验总结,如有不 ...
- spring boot / cloud (二) 规范响应格式以及统一异常处理
spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...
- 关于SP一些响应码的API返回码及解析集合
在一些金融的行业(银行.证券.保险等),如果接触了一些中间件,比如长城.恒银.广电等一些厂商的设备,不同的厂商有不同的一些规范,在应用开发的过程中难免会和中间件的错误码打交道,这里总结一下.基本常用的 ...
- Spring Boot 返回 XML 数据,一分钟搞定!
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击 ...
- Spring Boot源码简析 @EnableTransactionManagement
相关阅读 Spring Boot源码简析 事务管理 Spring Boot源码简析 @EnableAspectJAutoProxy Spring Boot源码简析 @EnableAsync Sprin ...
- spring boot 源码解析23-actuate使用及EndPoint解析
前言 spring boot 中有个很诱人的组件–actuator,可以对spring boot应用做监控,只需在pom文件中加入如下配置即可: <dependency><group ...
最新文章
- 多个类的DLL封装及调用
- 使用QCustomPlot绘图的基础
- spring 注解说明以及@Resource和@Autowired的区别
- 笨方法“学习python笔记之random
- 计算机符串长度的函数,用js写一个函数,计算出字符串的长度
- for (;;) 与 while (true),哪个更快?
- [转载]c语言中命令行参数argc,argv
- confly MySQL_MYSQL的操作类(已封装)
- VirtualBox安装RedHat7
- 普林斯顿微积分读本第一章--函数、反函数
- 12306的数据库设计
- paypal ec.php,paypal 支付流程
- 独立站开发优化问题?
- Visual Studio Code 编辑器
- 从祖师级到新生代,48位开发者的“武功秘籍”
- molar mass
- 为什么ASFR下载的实时流媒体无法播放?
- 未来科技的五大发展趋势
- Ajax提交Form表单的两种简单方式
- 矩阵特征向量和特征值的意义
热门文章
- mysql事务模式怎么查_Mysql InnoDB中的查询事务模式与锁定select ..for update
- ug建模文本怎么竖着_入门到成为UG编程高手,这些步骤你不得不了解
- java enumerator_NSEnumerator使用
- 消息长度_填坑笔记:RocketMQ消息订阅失败问题?
- 服务注册中心 eureka 搭建
- android广播第三方库,Android Support 库:LocalBroadcastManager
- [转帖]Docker 清理占用的磁盘空间
- sql的case when用法
- Openldap命令详解
- HDU 3094 树上删边 NIM变形