前后端分离:高复用服务响应对象设计

2021/10/3 6:13:47

本文主要是介绍前后端分离:高复用服务响应对象设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 什么是高复用服务响应对象?有什么作用?

  为了实现前后端分离,设计了一个所有接口都使用,封装后台业务数据放回json数据给前端的对象,用于实现前后端的分离,提升开发效率。

2. 怎么使用?

  ①首先,要明确,这个对象要实现序列化接口。

  它主要封装了三个属性,泛型的返回数据,字符串类型的提示信息以及整型的状态码,以及四个私有的构造函数。

  需要注意的是,当T 的类型也就是数据类型是String类型时,好像会和下面的String msg重合,到底会调用哪一个呢?

  答案是,当T为String时,的确会调用第二个,这样会产生一个问题,就是当返回的数据就是String,如果这样就会用到msg的那个构造函数,传到信息那边去了。

  解决方法在后面,所以具体如下:

  保证在序列化json时,如果为空的值,key也会消失,比如只要返回状态码时,msg和data就会忽略不返回

 1 //保证序列化json的时候,如果是null的对象,key也会消失
 2 @JsonSerialize(include =  JsonSerialize.Inclusion.NON_NULL)
 3 public class ServerResponse<T> implements Serializable {
 4 
 5     private int status;
 6     private String msg;
 7     private T data;
 8 
 9     private ServerResponse(int status){
10         this.status = status;
11     }
12     private ServerResponse(int status,T data){
13         this.status = status;
14         this.data = data;
15     }
16 
17     private ServerResponse(int status,String msg,T data){
18         this.status = status;
19         this.msg = msg;
20         this.data = data;
21     }
22 
23     private ServerResponse(int status,String msg){
24         this.status = status;
25         this.msg = msg;
26     }

  ②成员变量的get方法,以及一个判断状态码或者说判断响应是否成功的方法,具体如下:

 1     @JsonIgnore
 2     //使之不在json序列化结果当中
 3     public boolean isSuccess(){
 4         return this.status == ResponseCode.SUCCESS.getCode();
 5     }
 6 
 7     public int getStatus(){
 8         return status;
 9     }
10 
11     public T getData(){
12         return data;
13     }
14 
15     public String getMsg(){
16         return msg;
17     }

  ③提供对外访问的七个构造方法,成功的有四个,失败的三个,具体如下:

 1     public static <T> ServerResponse<T> createBySuccess(){
 2         return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
 3     }
 4 
 5     public static <T> ServerResponse<T> createBySuccessMessage(String msg){
 6         return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
 7     }
 8 
 9     public static <T> ServerResponse<T> createBySuccess(T data){
10         return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
11     }
12 
13     //这个方法就解决了msg和String类型的数据冲突的问题
14     public static <T> ServerResponse<T> createBySuccess(String msg,T data){
15         return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
16     }
17 
18     public static <T> ServerResponse<T> createByError(){
19         return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc());
20     }
21 
22 
23     public static <T> ServerResponse<T> createByErrorMessage(String errorMessage){
24         return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage);
25     }
26 
27     public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode,String errorMessage){
28         return new ServerResponse<T>(errorCode,errorMessage);
29     }

3. 总结

  这次的高复用服务响应对象的设计与使用涉及到泛型类,后端的数据的处理模式,枚举类的使用,以及前后端数据交互等知识,在后期使用postman进行接口功能测试时更加直观地看到了这个对象的作用。

 

文章来源:https://www.cnblogs.com/JimmyFanHome/p/9904557.html



这篇关于前后端分离:高复用服务响应对象设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程