Closed comdeng closed 6 years ago
http接口用错误码来判断吧,即使要抛出异常也要在拦截器里转换异常为错误码,比如{ "code":"500","errMsg":"系统异常"}
I agree with what @zuohl suggests, i think you should catch business exceptions on server side and encode it like {"code":"500","errMsg":"xxx"}
. This way, dubbo will pass the results to the initial caller, and you can handle it by yourself.
好的。不过这样还是会有一些限制。
一般的情况还要定义一个字段用来接收数据,如果有业务代码异常,则将其返回null。
比如
{"code":"500","errMsg":"xxx","data":null}
这样定义DTO的时侯,就不能将data字段映射成数组等类型,否则遇到null的时候仍然会invoke失败。
我们目前服务端使用了java和php混合开发,通过dubbo来做服务治理。java调用php接口时,基于rest协议连接。目前遇到的一个问题是,php抛异常的时候不知道如何被java认定为是业务异常,而不是invoke异常。 我们写了一些测试代码,通过java实现的rest协议的服务抛出异常来探索规律,目前了解到的是,http状态码应该符合如下规则: HTTP/1.1 500 java.lang.Exception:: error code 但是在php实现的接口里按照这样抛异常的话,java那边还是认为是invoke失败,而不是将其认定为业务类的异常。
请问,正确的抛业务异常的方式应该是怎样的呢?