springboot高级功能(八)访问成功或异常(excetion)返回指定的错误编码和信息
【摘要】
当返回异常时,是这样子的
{ "timestamp": "2019-12-11T05:37:10.096+0000", "status": 500, "error": "Internal Server Error", "message": "报错了", "path": "/test/testExcepti...
当返回异常时,是这样子的
-
{
-
"timestamp": "2019-12-11T05:37:10.096+0000",
-
"status": 500,
-
"error": "Internal Server Error",
-
"message": "报错了",
-
"path": "/test/testException"
-
}
但是 可能有时前台需要一个code值来判断抛出的错误 这样就需要我们封装去返回code值和message值
同时还可以拦截异常进行输出,是市面架构的通用做法
代码实现
1.自定义一个CustomExcepiton 需要继承Exception (或其他子类)
-
public class TemplateException extends Exception {
-
-
/**
-
* 服务器状态码
-
*/
-
private Integer code;
-
-
/**
-
* 错误信息
-
*/
-
private String message;
-
-
public Integer getCode() {
-
return code;
-
}
-
-
public void setCode(Integer code) {
-
this.code = code;
-
}
-
-
@Override
-
public String getMessage() {
-
return message;
-
}
-
-
public void setMessage(String message) {
-
this.message = message;
-
}
-
-
public TemplateException(String message) {
-
this.message = message;
-
}
-
-
public TemplateException(Integer code, String message) {
-
this.message = message;
-
this.code = code;
-
}
-
}
2.定义一个返回实体类
如果不进行处理 直接输出200和成功码
-
public enum CommonEnum {
-
-
SC_SUCCESS(200, "成功"),
-
-
SC_NO_JURISDICTION(401, "没有权限,请联系管理员授权"),
-
-
SC_INTERNAL_SERVER_ERROR_500(500, "接口异常");
-
-
}
-
public class Result<T> implements Serializable {
-
-
/**
-
* 返回编码
-
*/
-
private Integer code = 200;
-
-
/**
-
* 返回信息
-
*/
-
private String message = "操作成功";
-
-
/**
-
* 返回数据
-
*/
-
private T data;
-
-
/**
-
* 成功标志
-
*/
-
private boolean success = true;
-
-
public Result() {
-
}
-
-
public Result(Integer code, String Message) {
-
this.code = code;
-
this.message = Message;
-
}
-
-
public int getCode() {
-
return code;
-
}
-
-
public void setCode(Integer code) {
-
this.code = code;
-
}
-
-
public String getMessage() {
-
return this.message;
-
}
-
-
public void setMessage(String message) {
-
this.message = message;
-
}
-
-
public T getData() {
-
return data;
-
}
-
-
public void setData(T data) {
-
this.data = data;
-
}
-
-
public void SetResult(Integer code, String msg, T data) {
-
this.setMessage(msg);
-
this.setData(data);
-
this.setCode(code);
-
}
-
-
public static Result<Object> error(String msg) {
-
return error(CommonEnum.SC_INTERNAL_SERVER_ERROR_500.getCode(), msg);
-
}
-
-
public static Result<Object> error(int code, String msg) {
-
Result<Object> r = new Result<Object>();
-
r.setCode(code);
-
r.setMessage(msg);
-
return r;
-
}
-
}
3.定义一个ExceptionHandle 在异常时会进行逻辑处理
-
@RestControllerAdvice
-
public class DemoExceptionHandler {
-
-
private final static Logger logger = LoggerFactory.getLogger(DemoExceptionHandler.class);
-
-
/**
-
* 自定义异常处理
-
*
-
* @param e
-
* @return
-
*/
-
@ExceptionHandler(TemplateException.class)
-
public Result<?> handleTemplateException(TemplateException e) {
-
logger.info(e.getMessage());
-
e.printStackTrace();
-
return Result.error(e.getCode(), e.getMessage());
-
}
-
-
/**
-
* exception异常处理
-
*
-
* @param e
-
* @return
-
*/
-
@ExceptionHandler(Exception.class)
-
public Result<?> handleException(Exception e) {
-
logger.info(e.getMessage());
-
e.printStackTrace();
-
return Result.error("接口异常,错误信息为" + e.getMessage());
-
}
-
-
/**
-
* 权限异常
-
*
-
* @param e
-
* @return
-
*/
-
@ExceptionHandler({UnauthorizedException.class, AuthorizationException.class})
-
public Result<?> handleAuthorizationException(AuthorizationException e) {
-
logger.info(e.getMessage());
-
e.printStackTrace();
-
return Result.error(CommonEnum.SC_NO_JURISDICTION.getCode(), CommonEnum.SC_NO_JURISDICTION.getMessage());
-
}
-
}
这时候在抛出异常时 返回值为
-
{
-
"code": 10066,
-
"status": 0,
-
"msg": "报错了",
-
"data": null
-
}
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/103416524
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)