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...

当返回异常时,是这样子的


  
  1. {
  2. "timestamp": "2019-12-11T05:37:10.096+0000",
  3. "status": 500,
  4. "error": "Internal Server Error",
  5. "message": "报错了",
  6. "path": "/test/testException"
  7. }

但是 可能有时前台需要一个code值来判断抛出的错误 这样就需要我们封装去返回code值和message值

同时还可以拦截异常进行输出,是市面架构的通用做法

代码实现

1.自定义一个CustomExcepiton 需要继承Exception (或其他子类)


  
  1. public class TemplateException extends Exception {
  2. /**
  3. * 服务器状态码
  4. */
  5. private Integer code;
  6. /**
  7. * 错误信息
  8. */
  9. private String message;
  10. public Integer getCode() {
  11. return code;
  12. }
  13. public void setCode(Integer code) {
  14. this.code = code;
  15. }
  16. @Override
  17. public String getMessage() {
  18. return message;
  19. }
  20. public void setMessage(String message) {
  21. this.message = message;
  22. }
  23. public TemplateException(String message) {
  24. this.message = message;
  25. }
  26. public TemplateException(Integer code, String message) {
  27. this.message = message;
  28. this.code = code;
  29. }
  30. }

2.定义一个返回实体类

如果不进行处理 直接输出200和成功码


  
  1. public enum CommonEnum {
  2. SC_SUCCESS(200, "成功"),
  3. SC_NO_JURISDICTION(401, "没有权限,请联系管理员授权"),
  4. SC_INTERNAL_SERVER_ERROR_500(500, "接口异常");
  5. }

  
  1. public class Result<T> implements Serializable {
  2. /**
  3. * 返回编码
  4. */
  5. private Integer code = 200;
  6. /**
  7. * 返回信息
  8. */
  9. private String message = "操作成功";
  10. /**
  11. * 返回数据
  12. */
  13. private T data;
  14. /**
  15. * 成功标志
  16. */
  17. private boolean success = true;
  18. public Result() {
  19. }
  20. public Result(Integer code, String Message) {
  21. this.code = code;
  22. this.message = Message;
  23. }
  24. public int getCode() {
  25. return code;
  26. }
  27. public void setCode(Integer code) {
  28. this.code = code;
  29. }
  30. public String getMessage() {
  31. return this.message;
  32. }
  33. public void setMessage(String message) {
  34. this.message = message;
  35. }
  36. public T getData() {
  37. return data;
  38. }
  39. public void setData(T data) {
  40. this.data = data;
  41. }
  42. public void SetResult(Integer code, String msg, T data) {
  43. this.setMessage(msg);
  44. this.setData(data);
  45. this.setCode(code);
  46. }
  47. public static Result<Object> error(String msg) {
  48. return error(CommonEnum.SC_INTERNAL_SERVER_ERROR_500.getCode(), msg);
  49. }
  50. public static Result<Object> error(int code, String msg) {
  51. Result<Object> r = new Result<Object>();
  52. r.setCode(code);
  53. r.setMessage(msg);
  54. return r;
  55. }
  56. }

3.定义一个ExceptionHandle 在异常时会进行逻辑处理


  
  1. @RestControllerAdvice
  2. public class DemoExceptionHandler {
  3. private final static Logger logger = LoggerFactory.getLogger(DemoExceptionHandler.class);
  4. /**
  5. * 自定义异常处理
  6. *
  7. * @param e
  8. * @return
  9. */
  10. @ExceptionHandler(TemplateException.class)
  11. public Result<?> handleTemplateException(TemplateException e) {
  12. logger.info(e.getMessage());
  13. e.printStackTrace();
  14. return Result.error(e.getCode(), e.getMessage());
  15. }
  16. /**
  17. * exception异常处理
  18. *
  19. * @param e
  20. * @return
  21. */
  22. @ExceptionHandler(Exception.class)
  23. public Result<?> handleException(Exception e) {
  24. logger.info(e.getMessage());
  25. e.printStackTrace();
  26. return Result.error("接口异常,错误信息为" + e.getMessage());
  27. }
  28. /**
  29. * 权限异常
  30. *
  31. * @param e
  32. * @return
  33. */
  34. @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class})
  35. public Result<?> handleAuthorizationException(AuthorizationException e) {
  36. logger.info(e.getMessage());
  37. e.printStackTrace();
  38. return Result.error(CommonEnum.SC_NO_JURISDICTION.getCode(), CommonEnum.SC_NO_JURISDICTION.getMessage());
  39. }
  40. }

这时候在抛出异常时 返回值为 


  
  1. {
  2. "code": 10066,
  3. "status": 0,
  4. "msg": "报错了",
  5. "data": null
  6. }

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/103416524

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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