Spring Boot 如何自定义返回错误码错误信息

网友投稿 682 2022-12-30


Spring Boot 如何自定义返回错误码错误信息

说明

•在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端

INTERNAL_SERVER_ERROR(500, "Internal Server Error"),

下面我们来看看如何将我们自定义的错误码和错误信息返回到调用端。

1 自定义错误码

•首先我们要定义一个枚举类

public enum ErrorEnum {

/*

* 错误信息

* */

E_20011(20011, "缺少必填参数"),

;

private Integer errorCode;

private String errorMsg;

ErrorEnum(Integer errorCode, String errorMsg) {

this.errorCode = errorCode;

this.errtzRCbuorMsg = errorMsg;

}

public Integer getErrorCode() {

return errorCode;

}

public String getErrorMsg() {

return errorMsg;

}

2 定义一个异常类

•定义一个异常类继承RuntimeException类

public class BusinessException extends RuntimeException {

private static final long serialVersionUID = 1L;

private Integer code;

/**

* @param errorEnum 以错误的ErrorEnum做参数

*/

public BusinessException(ErrorEnum errorEnum) {

super(errorEnum.getErrorMsg());

this.code = errorEnum.getErrorCode();

this.resultjson = CommonUtil.errorJson(errorEnum);

}

public Integer getCode() {

return code;

}

public void setCode(Integer code) {

this.code = code;

}

}

3 定义一个异常返回的模板类

•模板类定义了如何将异常通过什么形式进行返回。

public class ExceptionResponse {

prihttp://vate String message;

private Integer code;

public ExceptionResponse(Integer code, String message) {

this.message = message;

this.code = code;

}

public static ExceptionResponse create(Integer code, String message) {

return new ExceptionResponse(code, message);

}

public Integer getCode() {

return code;

}

public String getMessage() {

return message;

}

}

4 定义全局处理 Controller 层异常

@ControllerAdvice

@Slf4j

public class ExceptionHandler {

@ResponseBody

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ExceptionHandler(Exception.class)

public ExceptionResponse handleException(Exception ex) {

if (ex instanceof BusinessException) {

log.warn(ex.getMessage(), ex);

BusinessException businessException = (BusinessException) ex;

return ExceptionResponse.create(businessException.getCode(), businessException.getMessage());

} else {

log.error(ex.getMessage(), ex);

return ExceptionResponse.create(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage());

}

}

}

5 演示效果

R26;定义Controller层

@PostMapping("test/exception")

public String testException() {

throw new BusinessException(ErrorEnum.E_20011);

}

•通过postMan调用返回结果为

{ "message": "缺少必填参数", "code": 20011 }

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:开源api网关国产(开源 网关)
下一篇:java枚举实现接口(java枚举的用法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~