JavaLib很早就實現了Result模塊,我也一直在用,但那是針對公用API接口的,若是後端開發人員也像那樣寫API接口給前端的話,很是麻煩,因此,很早就決定要重寫了,我也是參考了不少人的,看Spring Builder模式,有點糊塗,設計算是失敗了。前端
咱們先來看一下,長什麼樣吧。java
public class App { public static void main(String[] args) { // 成功,無數據,自定義返回碼和描述 Result result1 = ResultResponseUtil.ok().code(0).msg("Success"); // 成功,返回數據,自定義返回碼和描述 Result result2 = ResultResponseUtil.ok().code(0).msg("Success").data("data"); // 成功,無數據,經過enum方式存放返回碼 Result result3 = ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS); // 成功,返回數據,經過enum方式存放返回碼 Result result4 = ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data("data"); // 失敗,無數據,自定義返回碼和描述 Result result5 = ResultResponseUtil.error().code(-1).msg("Error"); // 失敗,返回數據,自定義返回碼和描述 Result result6 = ResultResponseUtil.error().code(-1).msg("Error").data("data"); // 失敗,無數據,經過enum方式存放返回碼 Result result7 = ResultResponseUtil.error().status(DefaultReturnCode.ERROR_INIT); // 失敗,返回數據,經過enum方式存放返回碼 Result result8 = ResultResponseUtil.error().status(DefaultReturnCode.ERROR_INIT).data("data"); Console.info(result1); Console.info(result2); Console.info(result3); Console.info(result4); Console.info(result5); Console.info(result6); Console.info(result7); Console.info(result8); Console.info(); Console.info(new Gson().toJson(result1)); Console.info(new Gson().toJson(result2)); Console.info(new Gson().toJson(result3)); Console.info(new Gson().toJson(result4)); Console.info(new Gson().toJson(result5)); Console.info(new Gson().toJson(result6)); Console.info(new Gson().toJson(result7)); Console.info(new Gson().toJson(result8)); } }
打印結果:git
DefaultResult{code=0 success=true msg=Success data=null} DefaultResult{code=0 success=true msg=Success data=data} DefaultResult{code=0 success=true msg=Success data=null} DefaultResult{code=0 success=true msg=Success data=data} DefaultResult{code=-1 success=false msg=Error data=null} DefaultResult{code=-1 success=false msg=Error data=data} DefaultResult{code=-1 success=false msg=init... data=null} DefaultResult{code=-1 success=false msg=init... data=data} {"success":true,"code":0,"msg":"Success"} {"success":true,"code":0,"msg":"Success","data":"data"} {"success":true,"code":0,"msg":"Success"} {"success":true,"code":0,"msg":"Success","data":"data"} {"success":false,"code":-1,"msg":"Error"} {"success":false,"code":-1,"msg":"Error","data":"data"} {"success":false,"code":-1,"msg":"init..."} {"success":false,"code":-1,"msg":"init...","data":"data"}
import com.fengwenyi.javalib.result.DefaultReturnCode; import com.fengwenyi.javalib.result.Result; import com.fengwenyi.javalib.result.ResultResponseUtil; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class ApiResultApplication { public static void main(String[] args) { SpringApplication.run(ApiResultApplication.class, args); } /** * 獲取全部用戶數據 * @return (json) */ @GetMapping("/getUsers") public Result getUsers() { User user1 = new User().setName("馮文議").setAge(26).setGender("男"); User user2 = new User().setName("張三").setAge(25).setGender("女"); User user3 = new User().setName("李四").setAge(23).setGender("保密"); User user4 = new User().setName("王五").setAge(20).setGender("未知"); User [] users = {user1, user2, user3, user4}; return ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users); } } @Data @Accessors(chain = true) class User { // 姓名 private String name; // 年齡 private Integer age; // 性別 private String gender; }
結果(已格式化):github
{ "code":0, "msg":"Success", "data":[ { "name":"馮文議", "age":26, "gender":"男" }, { "name":"張三", "age":25, "gender":"女" }, { "name":"李四", "age":23, "gender":"保密" }, { "name":"王五", "age":20, "gender":"未知" } ], "success":true }
這樣存在一個問題,也是上個版本有的,咱們修改一下代碼:web
//return ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users); return ResultResponseUtil.ok().code(0).data(users);
看結果:spring
API返回值存在 null
,相信你必定遇到了這個問題,那咱們怎麼避免這個問題呢?網上有不少解決辦法,我想說的是,咱們仍是應該按規則來寫,寫全寫完整。json
咱們再來看看另一種處理方式:後端
@GetMapping("/getUsers2") public String getUsers2() { User user1 = new User().setName("馮文議").setAge(26).setGender("男"); User user2 = new User().setName("張三").setAge(25).setGender("女"); User user3 = new User().setName("李四").setAge(23).setGender("保密"); User user4 = new User().setName("王五").setAge(20).setGender("未知"); User [] users = {user1, user2, user3, user4}; Result result = ResultResponseUtil .ok() .status(DefaultReturnCode.SUCCESS) .data(users); return new Gson().toJson(result); }
寫公用接口的時候,咱們必定要注意,避免全部的沒必要要。app
【1】 JavaLib測試
【3】 SpringMVC返回結果的封裝