boot返回码规范 spring_springboot项目编码规范
1.统一返回消息体规范
/**
* 用户信息接口
* @return
*/
@ApiOperation(value = "用户信息接口", notes = "用户信息接口")
@GetMapping(value = "/{id}")
public Resp getUser(@PathVariable("id") Integer id) {
Resp resp=Resp.success();
resp.setData(tUserRepository.findTUserEntityById(id));
return resp;
}
/**
* 自定义异常message接口,默认失败code=1
* @return
*/
@ApiOperation(value = "自定义异常message接口", notes = "自定义异常message接口")
@GetMapping(value = "/error3/{id}")
public Resp updateUser3(@PathVariable("id") Integer id) {
try{
tUserRepository.findByRoleId(id);
}catch (Exception e){
log.error("维修订单终止失败..." + e.getMessage(), e);
return Resp.failed("维修订单终止失败...");
}
return Resp.success();
}
package com.dousnl.utils.response;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
public class Resp {
private RespStatus status;
private Object data;
public Resp(){
}
public Resp(RespStatus status, Object data){
this.status = status;
this.data = data;
}
public Resp(RespStatus status) {
super();
this.status = status;
}
public Object getData() {
return data;
}
public Resp setData(Object data) {
this.data = data;
return this;
}
public RespStatus getStatus() {
return status;
}
public Resp setStatus(RespStatus status) {
this.status = status;
return this;
}
public static Resp success() {
return new Resp().setStatus(RespStatus.SUCCESSFUL);
}
//添加 成功并返回信息 wulingchi 2016-11-01
public static Resp success(String msg) {
final String c = String.valueOf(RespStatus.CODE_SUCCESSFUL);
final RespStatus s = new RespStatus(c, msg);
return new Resp().setStatus(s);
}
public static Resp failed() {
return new Resp().setStatus(RespStatus.FAILED);
}
public static Resp failed(String msg) {
final String c = String.valueOf(RespStatus.CODE_FAILED);
final RespStatus s = new RespStatus(c, msg);
return new Resp().setStatus(s);
}
public static Resp failed(BindingResult bindingResult){
final FieldError fieldError = bindingResult.getFieldError();
final String code = RespStatus.FAILED.getCode();
final String msg = fieldError.getDefaultMessage();
final RespStatus s = new RespStatus(code, msg);
return new Resp().setStatus(s);
}
public static Resp failed(String code, String msg){
final RespStatus s = new RespStatus(code, msg);
return new Resp().setStatus(s);
}
}
package com.dousnl.utils.response;
public class RespStatus {
public static final long CODE_SUCCESSFUL = 0L;
public static final String MSG_SUCCESSFUL = "ok";
public static final long CODE_FAILED = 1L;
public static final String MSG_FAILED = "failed";
public static final RespStatus SUCCESSFUL = new RespStatus(String.valueOf(CODE_SUCCESSFUL), MSG_SUCCESSFUL);
public static final RespStatus FAILED = new RespStatus(String.valueOf(CODE_FAILED), MSG_FAILED);
private String code;
private String msg;
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
public RespStatus() {
super();
}
public RespStatus(String code) {
super();
this.code = code;
}
public RespStatus(String code, String msg) {
this.code = code;
this.msg = msg;
}
public static long getCodeSuccessful() {
return CODE_SUCCESSFUL;
}
public static String getMsgSuccessful() {
return MSG_SUCCESSFUL;
}
public static long getCodeFailed() {
return CODE_FAILED;
}
public static String getMsgFailed() {
return MSG_FAILED;
}
public static RespStatus getSUCCESSFUL() {
return SUCCESSFUL;
}
public static RespStatus getFAILED() {
return FAILED;
}
public void setCode(String code) {
this.code = code;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.全局异常返回信息
package com.dousnl.config.exception;
import com.dousnl.utils.enums.ErrorEnums;
import com.dousnl.utils.exception.MyException;
import com.dousnl.utils.response.Resp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* 通用异常返回信息
*
* @author hanliang
* @version 1.0
* @date 2019/11/4 14:22
*/
@Slf4j
@RestControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(value = MyException.class)
public Resp myErrorHandler(MyException ex){
log.error("异常信息:" + ex.getMessage(), ex);
return Resp.failed(ex.getErrorCode(),ex.getMessage());
}
/**
* 默认的异常处理
* @param ex
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.OK)
public Resp exceptionHandler(Exception ex) {
log.error("异常信息:" + ex.getMessage(), ex);
return Resp.failed(ErrorEnums.SYSTEM_EXCEPTION.getCode(),ErrorEnums.SYSTEM_EXCEPTION.getMessage());
}
}
package com.dousnl.utils.exception;
import com.dousnl.utils.enums.ErrorEnums;
/**
* 自定义异常
*
* @author hanliang
* @version 1.0
* @date 2019/11/4 14:25
*/
public class MyException extends RuntimeException{
private String errorCode;
private String message;
public MyException() {
}
public MyException(ErrorEnums enums){
this.errorCode=enums.getCode();
this.message=enums.getMessage();
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.dousnl.utils.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 异常返回信息枚举
*
* @author 韩亮
* @version $ID:ErrorEnums, v0.1 2018/3/30 韩亮 Exp $
*/
@Getter
@AllArgsConstructor
public enum ErrorEnums {
//权限异常
SYSTEM_NOT_AUTHENTICATION_ERROR("401", "用户暂未认证"),
SYSTEM_UNAUTHORIZED_ERROR("403", "用户无权限"),
SYSTEM_TOKEN_VALIDATOR_ERROR("998", "TOKEN验证错误"),
SYSTEM_SQL_INJECT_ERROR("999", "参数存在sql注入风险"),
SYSTEM_ALREADY_LOGIN("error_login","您的账号已在其他终端登录,如不是您本人操作,请及时联系后台"),
//==================通用错误码定义====================
SUCCESS("000000", "交易成功"),
SYSTEM_BEAN_COPY_ERROR("000001", "对象拷贝异常"),
SYSTEM_STRING_TO_DATE_ERROR("000002", "字符串转日期失败"),
SYSTEM_PARAM_VALIDATOR_ERROR("000003", "参数校验失败"),
DB_ERROR("000010", "数据库查询异常"),
DB_INSERT_ERROR("000011", "数据库插入异常"),
DB_UPDATE_ERROR("000012", "数据库更新异常"),
DB_SELECT_ERROR("000013", "数据库查询异常"),
LOGIN_ERROR("000020", "登录失败"),
LOGIN_USER_NOT_EXIST_ERROR("000021", "用户不存在"),
LOGIN_AUTHENTICATION_FAILURE("000022", "身份验证失败"),
LOGIN_AD_CONNECT_ERROR("000023", "AD域连接失败"),
LOGIN_TOKEN_CREATE_ERROR("000024", "token生成失败"),
LOGIN_USER_DISABLED("000025", "用户状态为无效状态"),
EXPORT_FOUR_BANK_ERROR("000030", "四大银行报表导出失败"),
NO_PERMISSION_TO_DOWNLOAD("000031","没有权限下载或文件不存在"),
NO_QUALIFICATION_UPDATE_TO_PROJECTTYPE("000032","B级卡信息未完善,请完善B级卡信息"),
NO_DATA_SHIRO("000034","没有资格更新项目银行类型"),
EXPORT_Daily_Monitoring_ERROR("000035", "日常监控报表导出失败"),
RONG_CLOUD_REST_ERROR("000408", "融云服务端请求失败"),
SYSTEM_EXCEPTION("5000", "系统异常!"),
;
private final String code;
private final String message;
}
boot返回码规范 spring_springboot项目编码规范相关推荐
- boot返回码规范 spring_SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
200105-SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势 虽然 http 的提供了一整套完整.定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则 ...
- boot返回码规范 spring_SpringBoot自定义异常体系和错误码规范定义(个人经验总结)...
前言 本文说的自定义异常指的是继承了RuntimeException,专门用于Spring全局异常捕获处理的自定义异常类型,需要应用程序显示捕获并处理的异常不在本次讨论范围内. 本随笔经验总结,如有不 ...
- boot返回码规范 spring_sprigboot-new-coding-standards
sprigboot-new-coding-standards 介绍 SpringBoot脚手架,遵守严格的代码规范. 规范详细说明 1.遵循标准RESTful API 2.异常采用枚举进行封装(业务内 ...
- boot返回码规范 spring_三种自定义SpringBoot返回的状态码
关于如何自定义SpringBoot返回的状态码 关于HttpStatus 在SpringBoot中关于状态码有一个枚举类型,如下. public enum HttpStatus { CONTINUE( ...
- 开发指南专题三:JEECG微云快速开发平台项目编码规范
开发指南专题三:JEECG微云快速开发平台项目编码规范 4. 项目编码规范 4.1. 项目编码规范 1. 项目编码格式为UTF-8(包括:java,jsp,css,js) 2. sevice接口命名: ...
- 开发部项目编码规范说明
开发部项目编码规范说明 1. 格式与命名规范(Formating and Naming Conventions) 1.1 缩进 使用Tab缩进,而不是空格健 1.2 换行 单行字符不超过 ...
- ajax资料收集-Ajax文章(教程和实例)---Ajax资源下载(源码和教程)---Ajax规范标准
CSDN Blog Ajax文章搜索: http://search.csdn.net/search/ajax/1/blog/ 专题:Ajax技术应用开发 http://www.51cto.com/ht ...
- spring boot 源码解析43-JmxMetricWriter详解
前言 本文我们来介绍JmxMetricWriter, JmxMetricWriter是依赖于spring jmx 来实现的. 因此本文的开头先介绍一下spring boot 与jmx的集成,然后分析J ...
- c++ doxygen 注释规范_[代码规范]Go语言编码规范指导
本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...
最新文章
- GPT「高仿」问世:GPT-Neo,最大可达GPT-3大小,已开源 | AI日报
- LR中的吞吐量与响应时间
- android 常驻进程
- linux mint 13 input method of chinese
- vscode使用-添加格式化插件
- SpringBoot+El-upload实现上传文件到通用上传接口并返回文件全路径(若依前后端分离版源码分析)
- 【Linux】一步一步学Linux——ifdown命令(153)
- 程序员:最绝望的面试代码写了4个小时,就是不运行!最终收到15K的offer
- 需求获取安排计划书_6分钟教你写一份融资计划书
- oracle pl/sql编程详细,Oracle框架:PL/SQL编程:
- tabnavigator_使用TabNavigator在Firefox中享受桌面Alt-Tab样式导航
- JavaCC报错: JavaCC reported exit code 1: [-LOOKAHEAD=1, -STATIC=false
- python3中的rang()函数
- 厉害,96秒100亿,阿里双十一到底做了什么杠过亿级流量??
- 【3月22日】2022年百度机器学习春实习笔试题解
- 草根站长故事之:我的业余站长之路(中)
- PHP设置表格框线,ppt中表格边框线条怎样设置?
- uni-app开发的APP项目上线后,登录后自动检测更新,点击下载并安装,可手动检测版本更新,实现扫码下载功能
- 软交换总结之二-七号信令
- Java代码简洁-validation参数校验
热门文章
- Android Studio导入Fresco
- 通过Samba实现Win/Mac访问Linux
- MySQL 触发器简单实例
- 如何在SQL Server 2005中使用作业实现备份和特定删除
- python3 all any 判断迭代参数 是否全部 是否有 为true
- linux 内核 同步机制
- linux sed错误sed: -e expression #1, unknown option to `s'解决办法
- python3 AES 加解密
- Linux中TFTP使用详解
- VS2013编译Duilib界面库,“找不到Riched20.lib”的问题