我想将服务定义为Web服务。
我用register
名称定义了一个方法。它是一个类作为输入参数,名称为RegisterParam
,返回类型为RegisterResult
名称作为输出。
public class RegisterParam{
String name;
String family;
}
public class RegisterResult{
Integer registr_id;
}
public interface Service{
public RegisterResult register(RegistrParam param);
}
如果注册服务失败且其逻辑没有这样做,我有两个解决方案用于通知服务调用者:
在RegisterResult类中,添加一个属性result_code
,并为其值添加一个枚举。如果其值为零则意味着注册服务器成功完成,如果其值为零,则表示注册服务失败,result_code
显示失败原因。
注册服务在被剔除时抛出异常,并且如果没有任何异常抛出意味着注册服务成功完成。
我的问题是:上面的解决方案是什么,为什么?
答案 0 :(得分:0)
我认为你应该区分两种不同的情况:
1)发生异常,就像某些环境(例如数据库)不可用一样。 在这种情况下,我会抛出一个异常,它由Web服务实现自动转换为SOAPFault。这个的优点是,你的服务的调用者也是一个例外,可以通过它的异常处理来处理它。
2)预期的业务“错误”发生,例如用户未登录或未提供必要信息以使服务成功完成。 您的Web服务的调用者会收到一条响应消息,调用者必须将其解释,并且可能希望将其显示给提供该信息的用户。
最后,它取决于您提供给界面用户的界面合约!最重要的是描述您的服务如何处理不同的错误情况。
答案 1 :(得分:0)
案例1无结果:
public interface Service{
public void register(RegistrParam param);
}
在这种情况下,您的服务可以发送类似200的HTTP Status Code。您的客户将以这种方式解释状态代码:
如果您想了解发生了什么以及为什么您的请求因400错误而失败,您必须检查服务器日志或类似内容。
案例2,结果:
public interface Service{
public Response register(RegistrParam param);
}
我总是向客户发送一个Response对象:
public class Response {
private ResponseStatus status; // enum: (OK, ERROR, BAD_REQUEST)
private ResultType type; // enum: (RegisterResult, LoginResult etc...) defines how to interpret the field "data"
private Object data; // RegisterResult.java as jsonstring or Exception.java as jsonstring etc...
private long time = -1L; // execution time
}
如果我正在开发我的客户,我总能理解为什么我的请求失败了。