SpringBoot秒殺系統實戰02-優雅代碼編寫之封裝json輸出

搭建起了SpringBoot環境之後,那麼就可以開啓項目了,我們需要考慮優雅代碼編寫。
我們知道MVC模式Controller類裏面一般有兩大返回值:

  • rest api的json輸出
  • 頁面

一般來說,服務端和客戶端要做一個接口的約定。
一般封裝的json數據代表意義:

{
	"code":0      //500100代表庫存不足
	"msg":"success"    //代表code對應的相應信息
	"data":"data" 			 //可能是對象,也可能是一個數組
}

1.新建result包,新建Result結果的封裝類。

注意:因爲返回的data不知道是什麼類型,那麼定義一個泛型。

 

public class Result {
private int code;
private String msg;
private T data;
//success
private Result(T data) {
this.code=0;
this.msg=”success”;
this.data=data;
}
//error
private Result(CodeMsg cm) {
if(cm==null) {
return;
}   
 this.code=cm.getCode();
    this.msg=cm.getMsg();
}
//成功
public static <T> Result<T> success(T data){
    return new Result<T>(data) ;
}

// 失敗
public static <T> Result<T> error(CodeMsg sm) {//CodeMsg包含了code和msg
    return new Result<T>(sm);
}
public int getCode() {
    return code;
}
public void setCode(int code) {
    this.code = code;
}
public String getMsg() {
    return msg;
}
public void setMsg(String msg) {
    this.msg = msg;
}
public T getData() {
    return data;
}
public void setData(T data) {
    this.data = data;
}

新建CodeMsg,對處理結果成功或者錯誤的情況做一個CodeMsg的封裝。成功的時候,只返回數據。失敗的話,那麼就返回CodeMsg。(裏面包含錯誤碼以及錯誤信息)

/**

成功的時候,只返回數據。
失敗的話,那麼就返回CodeMsg。(裏面包含錯誤碼以及錯誤信息)
*
*/
public class CodeMsg {
private int code;
private String msg;
//通用異常
public static CodeMsg SUCCESS=new CodeMsg(0,”success”);
public static CodeMsg SERVER_ERROR=new CodeMsg(500100,”服務端異常!”);
public static CodeMsg BIND_ERROR=new CodeMsg(500101,”參數校驗異常:%s”);
public static CodeMsg REQUEST_ILLEAGAL=new CodeMsg(500102,”非法請求!”);
public static CodeMsg MIAOSHA_FAIL=new CodeMsg(500103,”秒殺失敗!”);
public static CodeMsg ACCESS_LIMIT=new CodeMsg(500104,”達到訪問限制次數,訪問太頻繁!”);
//登錄模塊異常
public static CodeMsg SESSION_ERROR=new CodeMsg(500210,”session失效!”);
public static CodeMsg PASSWORD_EMPTY=new CodeMsg(500211,”密碼不能爲空!”);
public static CodeMsg MOBILE_EMPTY=new CodeMsg(500212,”手機號不能爲空!”);
public static CodeMsg MOBILE_ERROR=new CodeMsg(500213,”手機號格式錯誤!”);
public static CodeMsg MOBILE_NOTEXIST=new CodeMsg(500214,”手機號號碼不存在!”);
public static CodeMsg PASSWORD_ERROR=new CodeMsg(500215,”密碼錯誤!”);
//訂單模塊異常
public static CodeMsg ORDER_NOT_EXIST=new CodeMsg(500410,”訂單不存在!”);
//秒殺模塊異常
public static CodeMsg MIAOSHA_OVER_ERROR=new CodeMsg(500500,”商品秒殺完畢,庫存不足!”);
public static CodeMsg REPEATE_MIAOSHA=new CodeMsg(500500,”不能重複秒殺!”);
public CodeMsg(int code,String msg) {
this.code=code;
this.msg=msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
//返回一個帶參數的錯誤碼
public CodeMsg fillArgs(Object…args) {//變參
int code=this.code;
//message是填充了參數的message
String message=String.format(this.msg, args);
return new CodeMsg(code,message);
}
@Override
public String toString() {
return “CodeMsg [code=” + code + “, msg=” + msg + “]”;
}
}

Controller裏面的代碼,使用了封裝類之後的返回效果更賞心悅目。注意:@ResponseBody註解,如果返回給前端json數據的時候,需要使用該註解!!!

@Controller
@RequestMapping(“/demo”)//注意!!!加了一個路徑
public class DemoController {
@RequestMapping(“/”)
@ResponseBody
public String home() {
return “hello world”;
}
@RequestMapping(“/hello”)
@ResponseBody
public Result hello() {//0代表成功
return Result.success(“hello sss”);
}
@RequestMapping(“/helloError”)
@ResponseBody
public Result helloError() {//0代表成功
return Result.error(CodeMsg.SERVER_ERROR);
}
}

成功顯示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章