java model 封装_Java封装统一的Result Model案例
在開發過程中,有時候會需要使用錯誤碼+錯誤信息的形式,來返回某些業務操作的錯誤結果信息,來代替效率較低的異常傳遞。
這樣就需要封裝一個統一的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", "success");
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 +
", message='" + message + '\'' +
'}';
}
}
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 +
", message=" + message +
", isSuccess=" + isSuccess +
'}';
}
}
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", "2", "3"));
s.isSuccess(); //true
ServiceResult, Integer> e1 = ServiceResult.error(CodeMessageEnum.some_error);
e1.isSuccess(); //false
ServiceResult, Long> 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案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持龍方網絡。
總結
以上是生活随笔為你收集整理的java model 封装_Java封装统一的Result Model案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成word_Word如何生成目录?3个
- 下一篇: java datetime 转换_如何实