Java项目构建基础---Json统一返回数据类型

统一结果返回

目前的前后端开发大部分数据的传输格式都是json,因此定义一个统一规范的数据格式有利于前后端的交互与UI的展示。

统一结果的一般形式

  • 是否响应成功;

  • 响应状态码;

  • 状态码描述;

  • 响应数据

  • 其他标识符

结果类枚举

前三者可定义结果枚举,如:success,code,message

 1 @Getter
 2 public enum ResultCodeEnum {
 3     SUCCESS(true,20000,"成功"),
 4     UNKNOWN_ERROR(false,20001,"未知错误"),,
 5     PARAM_ERROR(false,20002,"参数错误"),
 6     ;
 7 
 8     // 响应是否成功
 9     private Boolean success;
10     // 响应状态码
11     private Integer code;
12     // 响应信息
13     private String message;
14 
15     ResultCodeEnum(boolean success, Integer code, String message) {
16         this.success = success;
17         this.code = code;
18         this.message = message;
19     }
20 }

统一结果类

  1 /**
  2  * @author Hugo
  3  * @time 2020/4/20
  4  */
  5 
  6 public class R {
  7     private Boolean success;
  8 
  9     private Integer code;
 10 
 11     private String message;
 12 
 13     private Map <String,Object> data = new HashMap<String,Object>();
 14 
 15     /**
 16      *  私有化构造器
 17      */
 18     private R(){
 19 
 20     }
 21 
 22     /**
 23      * 通用返回失败,未知错误
 24      * @return
 25      */
 26     public static R error(){
 27         R r = new R();
 28         r.setSuccess(ResultCodeEnu.UNKNOWN_ERROR.getSuccess());
 29         r.setCode(ResultCodeEnu.UNKNOWN_ERROR.getCode());
 30         r.setMessage(ResultCodeEnu.UNKNOWN_ERROR.getMessage());
 31         return r;
 32     }
 33 
 34     /**
 35      * 通用返回成功
 36      * @return
 37      */
 38     public static R ok(){
 39         R r =new R();
 40         r.setSuccess(ResultCodeEnu.SUCCESS.getSuccess());
 41         r.setCode(ResultCodeEnu.SUCCESS.getCode());
 42         r.setMessage(ResultCodeEnu.SUCCESS.getMessage());
 43         return r;
 44     }
 45 
 46     /**
 47      * 设置结果,形参为结果枚举类
 48      * @param result
 49      * @return
 50      */
 51     public static R setResult(ResultCodeEnu result){
 52         R r =new R();
 53         r.setSuccess(result.getSuccess());
 54         r.setMessage(result.getMessage());
 55         r.setCode(result.getCode());
 56         return r;
 57     }
 58 
 59     /**       使用链式编程,返回类本身**/
 60     //  自定义返回数据
 61     public R data(Map<String,Object> map){
 62         this.setData(map);
 63         return this;
 64     }
 65 
 66     /**
 67      * 通用设置data
 68      * @param key
 69      * @param value
 70      * @return
 71      */
 72     public R data(String key, Object value){
 73         this.data.put(key, value);
 74         return this;
 75     }
 76 
 77     /**
 78      * 自定义状态信息
 79      * @param message
 80      * @return
 81      */
 82     public R message(String message){
 83         this.setMessage(message);
 84         return this;
 85     }
 86 
 87     /**
 88      * 自定义状态码
 89      * @param code
 90      * @return
 91      */
 92     public R code(Integer code){
 93         this.setCode(code);
 94         return this;
 95     }
 96 
 97     /**
 98      * 自定义返回结果
 99      * @param success
100      * @return
101      */
102     public R success(Boolean success){
103         this.setSuccess(success);
104         return this;
105     }
106 
107     public void setSuccess (Boolean success) {
108         this.success = success;
109     }
110 
111     public void setCode (Integer code) {
112         this.code = code;
113     }
114 
115     public void setMessage (String message) {
116         this.message = message;
117     }
118 
119     public void setData (Map <String, Object> data) {
120         this.data = data;
121     }
122 
123     public Boolean getSuccess () {
124         return success;
125     }
126 
127     public Integer getCode () {
128         return code;
129     }
130 
131     public String getMessage () {
132         return message;
133     }
134 
135     public Map <String, Object> getData () {
136         return data;
137     }
138 }

小小体验一手-----------

控制层返回

视图层使用统一结果

使用SpringBoot小小模拟一下

 1 **
 2  * @author Hugo
 3  * @time 2020/4/20
 4  */
 5 @RestController
 6 @RequestMapping("/api/users")
 7 public class TeacherAdminController {
 8 
 9 
10 
11     @GetMapping("list")
12     public R list(){
13         Model model =new Model();
14         model.setId("1");
15         model.setRole("vip1");
16         List <Model> list = new ArrayList <>();
17         list.add(model);
18         return R.ok().data("item",list);
19     }
20 }

最终返回结果

其他没有设置的属性默认为null

猜你喜欢

转载自www.cnblogs.com/blogger-Li/p/12741102.html