springboot高级功能(八)访问成功或异常(excetion)返回指定的错误编码和信息

举报
小鲍侃java 发表于 2021/09/11 00:01:30 2021/09/11
【摘要】 当返回异常时,是这样子的 { "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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。