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

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


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

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.      */
6. private Integer code;
7. 
8. /**
9.      * 错误信息
10.      */
11. private String message;
12. 
13. public Integer getCode() {
14. return code;
15.     }
16. 
17. public void setCode(Integer code) {
18. this.code = code;
19.     }
20. 
21. @Override
22. public String getMessage() {
23. return message;
24.     }
25. 
26. public void setMessage(String message) {
27. this.message = message;
28.     }
29. 
30. public TemplateException(String message) {
31. this.message = message;
32.     }
33. 
34. public TemplateException(Integer code, String message) {
35. this.message = message;
36. this.code = code;
37.     }
38. }

2.定义一个返回实体类

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

1. public enum CommonEnum {
2. 
3.     SC_SUCCESS(200, "成功"),
4. 
5.     SC_NO_JURISDICTION(401, "没有权限,请联系管理员授权"),
6. 
7.     SC_INTERNAL_SERVER_ERROR_500(500, "接口异常");
8. 
9. }
1. public class Result<T> implements Serializable {
2. 
3. /**
4.      * 返回编码
5.      */
6. private Integer code = 200;
7. 
8. /**
9.      * 返回信息
10.      */
11. private String message = "操作成功";
12. 
13. /**
14.      * 返回数据
15.      */
16. private T data;
17. 
18. /**
19.      * 成功标志
20.      */
21. private boolean success = true;
22. 
23. public Result() {
24.     }
25. 
26. public Result(Integer code, String Message) {
27. this.code = code;
28. this.message = Message;
29.     }
30. 
31. public int getCode() {
32. return code;
33.     }
34. 
35. public void setCode(Integer code) {
36. this.code = code;
37.     }
38. 
39. public String getMessage() {
40. return this.message;
41.     }
42. 
43. public void setMessage(String message) {
44. this.message = message;
45.     }
46. 
47. public T getData() {
48. return data;
49.     }
50. 
51. public void setData(T data) {
52. this.data = data;
53.     }
54. 
55. public void SetResult(Integer code, String msg, T data) {
56. this.setMessage(msg);
57. this.setData(data);
58. this.setCode(code);
59.     }
60. 
61. public static Result<Object> error(String msg) {
62. return error(CommonEnum.SC_INTERNAL_SERVER_ERROR_500.getCode(), msg);
63.     }
64. 
65. public static Result<Object> error(int code, String msg) {
66. Result<Object> r = new Result<Object>();
67.         r.setCode(code);
68.         r.setMessage(msg);
69. return r;
70.     }
71. }

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

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

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

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


相关文章
|
1月前
|
Java 数据库连接 mybatis
springboot访问jsp页面变成直接下载?
springboot访问jsp页面变成直接下载?
43 0
|
1月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
34 1
|
3天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
25天前
|
Java 测试技术 数据库
基于SpringBoot+HTML实现登录注册功能模块
基于SpringBoot+HTML实现登录注册功能模块
|
8天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的学生公寓电费信息的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的学生公寓电费信息的详细设计和实现
32 1
|
13天前
|
消息中间件 运维 供应链
springboot区域云HIS医院信息综合管理平台源码
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
21 2
|
19天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
20天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
15 0
|
27天前
|
Java
SpringBoot配置图片访问404SpringBoot配置图片访问路径springboot如何访问图片
SpringBoot配置图片访问404SpringBoot配置图片访问路径springboot如何访问图片
7 0
|
1月前
|
存储 JavaScript 前端开发
Spring Boot + Vue: 实现文件导入导出功能
本文介绍了使用Spring Boot和Vue实现文件导入导出的步骤。在后端,Spring Boot通过`MultipartFile`接收上传文件,保存至服务器,并使用`ResponseEntity`提供文件下载。前端部分,Vue项目借助`axios`发送HTTP请求,实现文件选择、上传及下载功能。这种前后端分离的实现方式提高了应用的可维护性和可扩展性。
40 2