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


    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

     
  • 相关阅读:
    MyBatis学习(一)
    ORM框架
    Java 核心技术点之注解
    git 分支 合并
    TensorFlow——零碎语法知识点
    TensorFlow——深入MNIST
    tensorflow——MNIST机器学习入门
    TensorFlow——小练习:feed
    TensorFlow——小练习:counter
    TensorFlow——交互式使用会话:InteractiveSession类
  • 原文地址:https://www.cnblogs.com/elian91/p/15363169.html
Copyright © 2020-2023  润新知