java實現json格式的狀態碼資料
阿新 • • 發佈:2019-02-12
功能
編寫一個返回格式是json格式的資料,並且此資料是狀態碼的資料。例如:
{“code”:200,”message”:”成功”,”date”:1504785964984}
技術與IDE
spring boot
IntelliJ IDEA
程式碼參考github:
程式碼片段
1. 建立狀態碼的類 – StatusCode
StatusCode .java
package com.yubai.jsonstatus.model;
/**
* 功能:輸出的json欄位的值是StatusCode類決定
* 就是說返回狀態的值是成功200還是失敗400還是錯誤404,這些值
* 是StatusCode這個類定義的。
*/
public enum StatusCode {
/** 成功 */
SUCCESS(200, "成功"),
/** 沒有登入 */
NOT_LOGIN(400, "沒有登入"),
/** 發生異常 */
EXCEPTION(401, "發生異常"),
/** 系統錯誤 */
SYS_ERROR(402, "系統錯誤"),
/** 引數錯誤 */
PARAMS_ERROR(403, "引數錯誤 "),
/** 不支援或已經廢棄 */
NOT_SUPPORTED(410, "不支援或已經廢棄"),
/** AuthCode錯誤 */
INVALID_AUTHCODE(444, "無效的AuthCode"),
/** 太頻繁的呼叫 */
TOO_FREQUENT(445, "太頻繁的呼叫"),
/** 未知的錯誤 */
UNKNOWN_ERROR(499, "未知錯誤");
private int code;
private String message;
StatusCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2. 建立返回json格式的類 – JsonResult
package com.yubai.swaggerrestfulapi;
/**
* 這個類定義了返回的json格式,即json含有哪些欄位
*/
public class JsonResult {
private String code;
private String message;
private Object data;
public JsonResult(String code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
public Object getData() {
return data;
}
}
3. 編寫登陸頁面的類 – LoginController
AdminController .java
package com.yubai.jsonstatus.controller;
import com.yubai.jsonstatus.model.JsonResult;
import com.yubai.jsonstatus.model.StatusCode;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;
/**
* 功能: 這是決定url的路勁,和判斷是否可以登陸成功的邏輯
*/
@RestController
@RequestMapping(value = "/login")
public class LoginController {
private String username = "admin";
private String password = "123";
/**
* @apiNote login
* @param maps 儲存username password
* @return JsonResult
*/
@RequestMapping(value = "")
public JsonResult login(HttpServletRequest request, HttpServletResponse response, @RequestParam Map<Integer, String> maps) {
if (maps.get("username").equals(username) && maps.get("password").equals(password)) {
return new JsonResult(StatusCode.SUCCESS.getCode(), StatusCode.SUCCESS.getMessage(), new Date());
} else {
return new JsonResult(StatusCode.NOT_LOGIN.getCode(), StatusCode.NOT_LOGIN.getMessage(), new Date());
}
}
}
4. 編寫啟動程式JsonStatusApplication
package com.yubai.swaggerrestfulapi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JsonStatusApplication{
public static void main(String[] args) {
SpringApplication.run(SwaggerRestfulApiApplication.class, args);
}
}
瀏覽器中訪問url:
返回結果:
如果不建立JsonResult會是什麼效果
程式碼塊(修改LoginController.java)
LoginController .java
package com.yubai.jsonstatus.controller;
import com.yubai.jsonstatus.model.JsonResult;
import com.yubai.jsonstatus.model.StatusCode;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;
/**
* 功能: 這是決定url的路勁,和判斷是否可以登陸成功的邏輯
*/
@RestController
@RequestMapping(value = "/login")
public class LoginController {
private String username = "admin";
private String password = "123";
/**
* @param maps 儲存username password
* @return JsonResult
* @apiNote login
*/
@RequestMapping(value = "")
public JsonResult login() {
if ("admin".equals(username) && "123".equals(password)) {
return new JsonResult(200, "成功", new Date());
} else {
return new JsonResult(400, "失敗", new Date());
}
}
}
比較建立JsonResult,會更靈活,擴充套件性更好。
因為當我們想要修改返回的code200/404/400或者message成功/失敗資訊時,需要修改多處使用到的地方。而我們定義JsonResult後,只需要在一個地方修改就可以修改所有的值
提高程式碼的質量
建議我們的程式碼具有靈活性,不要寫固定的程式碼。
就是說能用變數代替的不要用常量
思路:1. 直接建立變數,2. 建立類/列舉…
第一種直接建立變數
example:
需求: 在20個檔案中使用System.out.println(“我是白玉”); 當需求改變,修改我是白玉為“我是趙雅芝”,此時有兩種方法解決
方法一: 把20個檔案中的我是白玉逐一修改成我是趙雅芝。
方法二: 定義變數String name = “我是白玉”,在20個檔案中使用,當需要修改name的值時,直接修改name = ”我是趙雅芝“
兩種方法比較: 顯然第二種方法靈活性更好,只需要改動一個地方就可以改變所有使用的地方。第一種顯然比較笨拙,不建議採用
第二種直接建立類/列舉…
本例的JsonResult代替寫成固定的code200和message成功。顯然建立JsonResult這個列舉更靈活。
Junit測試類
詳情請見程式碼參考github