JavaLib很早就实现了Result模块,我也一直在用,但那是针对公用API接口的,如果后端开发人员也像那样写API接口给前端的话,非常麻烦,所以,很早就决定要重写了,我也是参考了很多人的,看Spring Builder模式,有点糊涂,设计算是失败了。
概要我们先来看一下,长什么样吧。
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));
}
}
打印结果:
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;
}
结果(已格式化):
{
"code":0,
"msg":"Success",
"data":[
{
"name":"冯文议",
"age":26,
"gender":"男"
},
{
"name":"张三",
"age":25,
"gender":"女"
},
{
"name":"李四",
"age":23,
"gender":"保密"
},
{
"name":"王五",
"age":20,
"gender":"未知"
}
],
"success":true
}
这样存在一个问题,也是上个版本有的,我们修改一下代码:
//return ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users);
return ResultResponseUtil.ok().code(0).data(users);
看结果:
API返回值存在 null
,相信你一定遇到了这个问题,那我们怎么避免这个问题呢?网上有很多解决办法,我想说的是,我们还是应该按规则来写,写全写完整。
我们再来看看另外一种处理方式:
@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);
}
写公用接口的时候,我们一定要注意,避免所有的不必要。
资料【1】 JavaLib
【3】 SpringMVC返回结果的封装