您的当前位置:首页Java封装统一的ResultModel案例

Java封装统一的ResultModel案例

来源:小侦探旅游网
Java封装统⼀的ResultModel案例

在开发过程中,有时候会需要使⽤错误码+错误信息的形式,来返回某些业务操作的错误结果信息,来代替效率较低的异常传递。

这样就需要封装⼀个统⼀的Result model作为返回值,代替直接返回数据等结果。1.定义错误码 - 错误信息接⼝

错误码可能是String、Integer、Long 等类型,也可能是enum类型。因此这⾥使⽤泛型来代替,错误码类型,可以提⾼灵活性。也可以通过枚举直接实现CodeMessage接⼝。

public interface CodeMessage{ C getCode();

String getMessage();}

2.实现Result Model

这⾥定义的是service层的Result。有时候在controller层只会作⼀些简单的参数校验,在service层会作进⼀步的校验,如果controller中需要统⼀返回⼀个JsonResult可以将ServiceResult作⼀个简单的转换器进⾏转换。

public class ServiceResult implements Serializable {

public static final CodeMessage SUCCESS = new DefaultMessage<>(\"00000000\ private T data;

private CodeMessage message; private boolean isSuccess;

ServiceResult(T data, boolean isSuccess, CodeMessage message) { this.data = data;

this.message = message; this.isSuccess = isSuccess; }

public T getData() { return data; }

public CodeMessage getCodeMessage() { return message; }

public boolean isSuccess() { return isSuccess; }

public static ServiceResultBuilder success() { ServiceResultBuilder builder = builder(); return builder.isSuccess(true); }

public static ServiceResultBuilder success(CodeMessage codeMessage) { ServiceResultBuilder builder = builder();

return builder.isSuccess(true).code(codeMessage.getCode()).message(codeMessage.getMessage()); }

public static ServiceResult success(D data) {

ServiceResultBuilder success = success(SUCCESS); return success.data(data).build(); }

public static ServiceResult error(CodeMessage codeMessage) { ServiceResultBuilder builder = builder();

return builder.isSuccess(false).code(codeMessage.getCode()).message(codeMessage.getMessage()).build(); }

public static ServiceResultBuilder error() { ServiceResultBuilder builder = builder(); return builder.isSuccess(false);

}

static ServiceResultBuilder builder() { return new ServiceResultBuilder<>(); }

public static class DefaultMessage implements CodeMessage, java.io.Serializable { private C code;

private String message;

public DefaultMessage(C code, String message) { this.code = code;

this.message = message; }

@Override

public C getCode() { return code; }

@Override

public String getMessage() { return message; }

@Override

public String toString() {

return \"DefaultMessage{\" + \"code=\" + code +

\ '}'; } }

public static class ServiceResultBuilder { private T data; private C code;

private String message; private boolean isSuccess;

ServiceResultBuilder() { //package private }

public ServiceResultBuilder data(T data) { this.data = data; return this; }

ServiceResultBuilder isSuccess(boolean isSuccess) { this.isSuccess = isSuccess; return this; }

public ServiceResultBuilder code(C code) { this.code = code; return this; }

public ServiceResultBuilder message(String message) { this.message = message; return this; }

public ServiceResult build() { Objects.requireNonNull(code, \"code\"); Objects.requireNonNull(code, \"message\");

return new ServiceResult<>(data, isSuccess, new DefaultMessage<>(code, message)); } }

@Override

public String toString() { return \"ServiceResult{\" +

\"data=\" + data +

\ \ '}'; }}

3.使⽤

定义枚举错误码

pubilc enum CodeMessageEnum implements CodeMessage { some_error(1001, \"错误信息。\"); Integer code; String message;

CodeMessageEnum(Integer code, String message) { this.code = code;

this.message = message; }

@Override

public Integer getCode() { return code; }

@Override

public String getMessage() { return message; }}

//返回正确结果带返回值。

ServiceResult, String> s = ServiceResult.success(Arrays.asList(\"1\s.isSuccess(); //true

ServiceResult e1 = ServiceResult.error(CodeMessageEnum.some_error);e1.isSuccess(); //false

ServiceResult e2 = ServiceResult.error(new ServiceResult.DefaultMessage<>(1000L, \"error\"));e2.isSuccess(); //false

//ServiceResult{data=[1, 2, 3], message=DefaultMessage{code=00000000, message='success'}, isSuccess=true}System.out.println(s);

//ServiceResult{data=null, message=DefaultMessage{code=1001, message='错误信息。'}, isSuccess=false}System.out.println(e1);

//ServiceResult{data=null, message=DefaultMessage{code=1000, message='error'}, isSuccess=false}System.out.println(e2);

补充知识:java 封装返回结果实体类 返回结果以及错误信息我就废话不多说了,⼤家还是直接看代码吧~

public class ResponseMessage {

private final static String STATUS_OK = \"0\";

private final static String STATUS_ERROR = \"1\"; private String status; // 状态 private Object data; // 返回值

private Exception e; // 异常类捕获 private String msg; // ⾃定义信息 public String getStatus() { return status; }

public void setStatus(String status) { this.status = status; }

public Object getData() { return data; }

public void setData(Object data) { this.data = data; }

public Exception getE() { return e; }

public void setE(Exception e) {

this.e = e; }

public String getMsg() { return msg; }

public void setMsg(String msg) { this.msg = msg; }

public ResponseMessage() { super(); }

public ResponseMessage(String status, Object data, Exception e, String msg) { super();

this.status = status; this.data = data; this.e = e;

this.msg = msg; }

/**

* 成功的结果

* @param data 返回结果 * @param msg 返回信息 */

public static ResponseMessage newOkInstance(Object data, String msg) {

return new ResponseMessage(ResponseMessage.STATUS_OK, data, null, msg); }

/**

* 成功的结果

* @param data 返回结果 */

public ResponseMessage newOkInstance(Object data) {

return new ResponseMessage(ResponseMessage.STATUS_OK, data, null, null); }

/**

* 失败的结果

* @param msg 返回信息 */

public static ResponseMessage newErrorInstance(String msg) {

return new ResponseMessage(ResponseMessage.STATUS_ERROR, null, null, msg); }

/**

* 失败的结果

* @param e 异常对象 * @param msg 返回信息 */

public static ResponseMessage newErrorInstance(Exception e, String msg) {

return new ResponseMessage(ResponseMessage.STATUS_ERROR, null, e, msg); }}

以上这篇Java封装统⼀的Result Model案例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容