diff --git a/README.md b/README.md
index 4ca96048..2eae0a3d 100644
--- a/README.md
+++ b/README.md
@@ -122,18 +122,21 @@
# Spring Cloud Alibaba 专栏
+## Spring Cloud Alibaba 全家桶
+
* [《芋道 Spring Cloud Alibaba 注册中心 Nacos 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Nacos-Discovery/?github) 对应 [labx-01](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-01)
-* [《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》](http://www.iocoder.cn/Spring-Cloud-Netflix/Ribbon/?github) 对应 [labx-02](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-02)
-* [《芋道 Spring Cloud 声明式调用 Feign 入门》](http://www.iocoder.cn/Spring-Cloud/Feign/?github) 对应 [labx-03](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-03)
* 《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》
* [《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Sentinel/?github) 对应 [labx-04](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-04)
-* 《芋道 Spring Cloud Netflix 服务容错 Hystrix 入门》
* 《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》
* 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》
+
+## 推荐搭配食用
+
+* [《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》](http://www.iocoder.cn/Spring-Cloud-Netflix/Ribbon/?github) 对应 [labx-02](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-02)
+* [《芋道 Spring Cloud 声明式调用 Feign 入门》](http://www.iocoder.cn/Spring-Cloud/Feign/?github) 对应 [labx-03](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-03)
* 《芋道 Spring Cloud 服务网关 Spring Cloud Gateway 入门》
-* 《芋道 Spring Cloud Netflix 服务网关 Zuul 入门》
-* 《芋道 Spring Cloud 链路追踪 Sleuth 入门》
* 《芋道 Spring Cloud 链路追踪 SkyWalking 入门》
+
* TODO 监控
# Spring Cloud 专栏
@@ -151,6 +154,22 @@
## 服务容错
* [《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Sentinel/?github) 对应 [labx-04](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-04)
+* 《芋道 Spring Cloud Netflix 服务容错 Hystrix 入门》
+
+## API 网关
+
+* 《芋道 Spring Cloud 服务网关 Spring Cloud Gateway 入门》
+* 《芋道 Spring Cloud Netflix 服务网关 Zuul 入门》
+
+## 配置中心
+
+* 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》
+* 《芋道 Spring Cloud 配置中心 Apollo 入门》
+
+## 链路追踪
+
+* 《芋道 Spring Cloud 链路追踪 Sleuth 入门》
+* 《芋道 Spring Cloud 链路追踪 SkyWalking 入门》
---------
diff --git a/labx-04/labx-04-sca-sentinel-demo01-provider/pom.xml b/labx-04/labx-04-sca-sentinel-demo01-provider/pom.xml
index 2b0a0904..83996125 100644
--- a/labx-04/labx-04-sca-sentinel-demo01-provider/pom.xml
+++ b/labx-04/labx-04-sca-sentinel-demo01-provider/pom.xml
@@ -10,20 +10,10 @@
4.0.0
labx-04-sca-sentinel-demo01-provider
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 6
- 6
-
-
-
-
+ 1.8
+ 1.8
2.2.4.RELEASE
Hoxton.SR1
2.2.0.RELEASE
diff --git a/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/DemoProviderApplication.java b/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/DemoProviderApplication.java
index c11a5647..569f4d28 100644
--- a/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/DemoProviderApplication.java
+++ b/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/DemoProviderApplication.java
@@ -4,7 +4,6 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
-//@EnableWebMvc
public class DemoProviderApplication {
public static void main(String[] args) {
diff --git a/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/web/GlobalExceptionHandler.java b/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/web/GlobalExceptionHandler.java
index a02f3017..f60b2fe6 100644
--- a/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/web/GlobalExceptionHandler.java
+++ b/labx-04/labx-04-sca-sentinel-demo01-provider/src/main/java/cn/iocoder/springcloudalibaba/labx04/sentineldemo/provider/web/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@
package cn.iocoder.springcloudalibaba.labx04.sentineldemo.provider.web;
import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -11,9 +12,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
public class GlobalExceptionHandler {
@ResponseBody
- @ExceptionHandler(value = BlockException.class)
- public String blockExceptionHandler(BlockException blockException) {
- return "请求被拦截,拦截类型为 " + blockException.getClass().getSimpleName();
+ @ExceptionHandler(value = BlockException.class) // 因为这里是示例,所以暂时使用 JSONObject,实际项目最终定义一个 CommonResult。
+ public JSONObject blockExceptionHandler(BlockException blockException) {
+ return new JSONObject().fluentPut("code", 1024)
+ .fluentPut("msg", "请求被拦截,拦截类型为 " + blockException.getClass().getSimpleName());
}
}