apache / servicecomb-samples

Apache servicecomb
https://servicecomb.apache.org/
Apache License 2.0
499 stars 144 forks source link

在CSE中使用Handler进行拦截时,抛出的异常如何正常回显至调用方 #59

Closed 992923410 closed 3 years ago

992923410 commented 3 years ago

在CSE中使用Handler进行拦截时,Handler抛出了相应的自定义异常,CSE会对异常进行封装,如何让CSE不进行原异常的封装而是原异常抛出 微信图片_20201106103642

liubao68 commented 3 years ago

不可以直接返回原始异常的。一方面是考虑exception的序列化问题,java-chassis是类型无关(跨语言)的RPC,不能包含类型信息;另一方面不反悔原始异常也是考虑信息泄露问题。 可以考虑异常处理来返回更加友好的经过处理的信息。

992923410 commented 3 years ago

感谢回答! 还有个问题,在handler中使用@Autowired进行注入发现均为null值,是需要配置其他东西吗? 微信图片_20201109111437

liubao68 commented 3 years ago

Handler 不是 spring bean, 因此无法注入 spring bean。 需要采用一些技巧实现在非 spring bean 中使用 bean。 比如通过 BeanUtils 或者 增加一个 bean, 提供 static 方法获取。