微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)

目录

 

一、创建通用工程ly-common项目

1、引入四个工具包

引入springboot的自动日志配置相关依赖

2、jsonUtile类的使用

二、通用异常处理

1.场景

interface项目中创建实体类

在service项目中编写业务

使用insomnia工具测试

问题解决

自定义异常


一、创建通用工程ly-common项目

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第1张图片

1、引入四个工具包

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第2张图片

引入jar 

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第3张图片

引入springboot的自动日志配置相关依赖

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第4张图片

 进入json相关依赖

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第5张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第6张图片

2、jsonUtile类的使用

作用:将对象序列化成json,将json反序列化成对象

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第7张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第8张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第9张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第10张图片

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第11张图片

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第12张图片

二、通用异常处理

1.场景

我们预设这样一个场景,加如我们做新增商品,需要接收下面的参数:

price:价格

name:名称

然后对数据做简单校验:价格不能为空。

新增时,自动形成ID,然后随商品对象一起返回

interface项目中创建实体类

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第13张图片

在service项目中编写业务

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第14张图片

在之前我们使用的是responsebody(将响应的对象放入到response body中) 

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第15张图片

现在我们为了符号restful风格,对于返回的异常使用状态码,这个时候,使用responsebody显然不合适了

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第16张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第17张图片

使用insomnia工具测试

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第18张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第19张图片

为了能够返回异常信息,直接通过抛异常的方式返回

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第20张图片

 我们可以看到我们虽然返回了异常信息,但是显示的是500(服务器异常)

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第21张图片

问题解决

主要原因是在于抛出的异常被springMvc统一处理了,所以我们需要自定义异常处理

如果自定义异常处理的话,采用的是aop思想,将请求拦截下来,进行处理通知

由于是通用的异常处理,所以其他的项目都需要使用,所以需要将异常处理放到common包下,由于使用的是springMvc的aop所以需要引入springmvc包(不需要引入自动配置包)

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第22张图片

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第23张图片

在默认情况下@controlleradvice需要拦截所有的controller响应

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第24张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第25张图片

在ly-item-service项目中引入ly-common项目

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第26张图片

 注意:包扫描问题(包结构),ly-item-service一定是能够扫描到ly-common下的@controlleradvice

测试

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第27张图片

但是现在问题又来了,它只返回了一个简单的错误信息,而且状态码是写死了的,不灵活

自定义异常

 创建lyexception类管理该电商项目的所有异常

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第28张图片

创建exceptionEnum枚举来管理异常信息  

必须要有一个分号隔开,前面放对象,后面放属性

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第29张图片 

编写异常处理

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第30张图片

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第31张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第32张图片 

但是我们可以看到返回的状态码问题解决了,但是错误信息 那里返回的还是简单

创建exceptionresult类

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第33张图片

微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第34张图片

 微服务项目之电商--10.创建通用工程ly-common项目及通用异常处理(2)_第35张图片

 

你可能感兴趣的:(项目实战)