Result dubbo接口返回类型的设计

时间:2025-04-24 07:43:55
 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 ();
	}
}