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; }