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


相关文章
|
7月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
594 4
|
7月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
725 2
|
9月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1490 10
|
10月前
|
缓存 前端开发 Java
SpringBoot 实现动态菜单功能完整指南
本文介绍了一个动态菜单系统的实现方案,涵盖数据库设计、SpringBoot后端实现、Vue前端展示及权限控制等内容,适用于中后台系统的权限管理。
1096 1
|
10月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1601 1
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1589 8
|
11月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
2365 0
|
7月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。

热门文章

最新文章