dubbo实现了分布式远程调用的框架,集成了spring配置功能,dubbo要求远程接口的参数和返回值都是可序列化的,Result<T>泛型返回类型可作为接口的统一返回类型:
- int code,接口调用成功=0,错误码=其他值
- T object,具体返回值
- String error,字符串错误码,可选
- String message,错误消息,可选,error=message可以配置成属性文件
- Exception exception,异常消息,可选
public class Result<T> implements Serializable {
/**
* 接口调用成功,不需要返回对象
*/
public static <T> Result<T> newSuccess(){
Result<T> result = new Result<>();
return result;
}
/**
* 接口调用成功,有返回对象
*/
public static <T> Result<T> newSuccess(T object) {
Result<T> result = new Result<>();
(object);
return result;
}
/**
* 接口调用失败,有错误码和描述,没有返回对象
*/
public static <T> Result<T> newFailure(int code, String message){
Result<T> result = new Result<>();
(code!=0 ? code : -1);
(message);
return result;
}
/**
* 接口调用失败,有错误字符串码和描述,没有返回对象
*/
public static <T> Result<T> newFailure(String error, String message){
Result<T> result = new Result<>();
(-1);
(error);
(message);
return result;
}
/**
* 转换或复制错误结果
*/
public static <T> Result<T> newFailure(Result<?> failure){
Result<T> result = new Result<>();
(()!=0 ? () : -1);
(());
(());
(());
return result;
}
/**
* 接口调用失败,返回异常信息
*/
public static <T> Result<T> newException(Exception e){
Result<T> result = new Result<>();
(-1);
(e);
(());
return result;
}
private int code;
private T object;
private String error;
private String message;
private Exception exception;
/** 判断返回结果是否成功 */
public boolean success() {
return code == 0;
}
/** 判断返回结果是否有结果对象 */
public boolean hasObject() {
return code==0 && object!=null;
}
/** 判断返回结果是否有异常 */
public boolean hasException() {
return exception != null;
}
public int getCode() {
return code;
}
public void setCode(int code) {
= code;
}
public T getObject() {
return object;
}
public void setObject(T object) {
= object;
}
public String getError() {
return error;
}
public void setError(String error) {
= error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
= message;
}
public Exception getException() {
return exception;
}
public void setException(Exception exception) {
= exception;
}
public String toString() {
StringBuilder result = new StringBuilder("Result");
if(object!=null) ("<"+().getSimpleName()+">");
(": {code="+code);
if(object!=null) (", object="+object);
if(error!=null) (", error="+error);
if(message!=null) (", message="+message);
if(exception!=null) {
StringWriter stringWriter = new StringWriter();
(new PrintWriter(stringWriter));
(", exception="+());
}
(" }");
return ();
}
}