欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

返回给前端样式数据整合Swagger

程序员文章站 2022-01-07 09:48:18
对于前端样式整合swagger,只对接口做增强,不对接口逻辑做修改,当json样式拼接完成,我们把json转为对应的实体类即可。 前端json样式对象构造参考:https://workshops.otrs365.cn/web/#/132?page_id=1248 针对前端样式,此次抽出5个公共模块类 ......

对于前端样式整合swagger,只对接口做增强,不对接口逻辑做修改,当json样式拼接完成,我们把json转为对应的实体类即可。

前端json样式对象构造参考:

针对前端样式,此次抽出5个公共模块类,下面对这些类进行展开叙述

 

返回给前端样式数据整合Swagger

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

returndata 返回给前端的数据(最外层)

returndata<t,l,o>

返回给前端样式数据整合Swagger
/**
 * @param <t> formstyle里面data的泛型
 * @param <l> listhead里面的字段的具体属性
 * @param <o> overviewlist,一般与数据库表属性对应
 * @description:
 * @author: 张重虎
 * @date: 2021/6/2 9:31
 * @copyright: xi'an dian tong software co., ltd. all rights reserved.
 * @version 1.0
 */
@data
@apimodel
public class returndata<t,l,o> {
    @jsonproperty("tablestyle")
    @apimodelproperty(value = "表格样式")
    private tablestyle<l,o> tablestyle;
    @apimodelproperty(value = "表单样式")
    @jsonproperty("formstyle")
    private formstyle<t> formstyle;
}

 

returndata<t,l,o>使我们能高度自定义返回的样式

前端界面以简单的formstyle和tablestyle展开拼接

 

返回给前端样式数据整合Swagger

 

formstyle (返回给前端的表单样式)

formstyle里面有两个基本属性: data和order。data里面是一个个order对象,对象里面是具体的属性

formstyle<t>

@lombok.data
@apimodel
public class formstyle<t> {
    @apimodelproperty(value = "页面表单字段具体样式")
    private t data;
    @apimodelproperty(value = "页面表单展示字段")
    private list<string> order;
}

 

返回给前端样式数据整合Swagger

 

data对应一个泛型,泛型里面定义data的基本属性,一般以下属性就够了,多的在继承这个类,然后进行扩展即可

formstyledatageneric:

返回给前端样式数据整合Swagger
@data
@apimodel
public class formstyledatageneric {
    @jsonproperty("default")
    @apimodelproperty(value = "默认值")
    private string defaults;

    @apimodelproperty(value = "展示")
    private string display;

    @jsonproperty("promptcode")
    @apimodelproperty(value = "0,不做提示;1,展示在文本框内;2,展示在字段下方;,3,展示图标在字段尾部进行提示;4,以红色提示展示在字段下方")
    private int promptcode;

    @apimodelproperty(value = "表单提交到后台的 key")
    private string name;

    @apimodelproperty(value = "可选项")
    private jsonobject options;

    @jsonproperty("disabledclear")
    @apimodelproperty(value = "可清除/可擦除")
    private int disabledclear;

    @jsonproperty("promptmessage")
    @apimodelproperty(value = "提示信息")
    private string promptmessage;

    @apimodelproperty(value = "翻译信息展示在左侧的 label 中")
    private string label;

    @apimodelproperty(value = "字段类型。文本:text,下拉选:dropdown,树:selecttree,复选框:checkbox,时间类型:datetime(年月日-时分秒),date(年月日)")
    private string type;
}

 

formstyledatageneric里面的属性对应前端界面效果

 

返回给前端样式数据整合Swagger 

formstyle<t> ,t 如果formstyledatageneric里面的属性不满足,则自定义一个即可

使用方法 formstyle<formstyledatageneric>

tablestyle (返回给前端的表格样式)

tablestyle<l,o>

返回给前端样式数据整合Swagger
@data
@apimodel
public class tablestyle<l,o> {
    @jsonproperty("preferencefields")
    @apimodelproperty(value = "表格中表头字段")
    private list<string> preferencefields ;

    @apimodelproperty(value = "可配置数据")
    private list<string> configdata ;


    @apimodelproperty(value = "表格数据总数")
    private int total;

    @jsonproperty("overviewlist")
    @apimodelproperty(value = "表格中具体某条数据")
    private list<o> overviewlist;

    @jsonproperty("listheader")
    @apimodelproperty(value = "表头字段的具体属性")
    private l listheader;
}

 

tablestyle<l,o>对应页面属性说明

 

返回给前端样式数据整合Swagger

 

看得出来,tablestyle<l,o>里面有两个泛型,如果基本的属性满足不了我们,我们自定义一个类,然后传进去即可。另外,泛型o一般是对应我们数据表的那个dao实体类,直接传进去即可

泛型l,l代表listheader里面的属性,就是表头字段的属性,在小岛这里看不出来,我们用另一个界面对这些属性进行解读。

定义listheader<t>的时候,我们根据数据表dao去定义属性,然后加上泛型t即可

listheader<t> , 这个t我们一般传listheadergeneric就够了,如果需要添加其他字段,就自定义一个泛型,往里面传即可

返回给前端样式数据整合Swagger
@data
@apimodel
public class listheader<t> {
    @apimodelproperty(value = "模板")
    private t template;

    @apimodelproperty(value = "流程")
    private t process;

    @jsonproperty("featurecode")
    @apimodelproperty(value = "特征码")
    private t featurecode;

    @jsonproperty("communicationconfigname")
    @apimodelproperty(value = "通讯地址名称")
    private t communicationconfigname;

    @jsonproperty("datapackagename")
    @apimodelproperty(value = "数据包名称")
    private t datapackagename;

    @jsonproperty("changeby")
    @apimodelproperty(value = "修改者")
    private t changeby;

    @jsonproperty("changetime")
    @apimodelproperty(value = "修改时间")
    private t changetime;

    @jsonproperty("createby")
    @apimodelproperty(value = "创建者")
    private t createby;

    @jsonproperty("createtime")
    @apimodelproperty(value = "创建时间")
    private t createtime;

    @apimodelproperty(value = "名称")
    private t name;

    @jsonproperty("operationtype")
    @apimodelproperty(value = "操作类型")
    private t operationtype;

    @apimodelproperty(value = "备注")
    private t comment;

    @apimodelproperty(value = "说明")
    private t direction;
}

 

listheadergeneric

返回给前端样式数据整合Swagger
@data
@apimodel
public class listheadergeneric {
    @jsonproperty("sortby")
    @apimodelproperty(value = "排序:0可排序,1不可排序")
    private int sortby;

    @jsonproperty("label")
    @apimodelproperty(value = "标签")
    private string label;

    @jsonproperty("filterkey")
    @apimodelproperty(value = "过滤key,代表该字段可进行过滤")
    private string filterkey;
}

 

返回给前端样式数据整合Swagger

 

 

返回给前端样式数据整合Swagger

tablestyle<l,o>使用方法tablestyle<listheader<listheadergeneric>,overviewlist>

特殊情况

返回的数据比returndata更多

以communication通讯地址为例

ps:以后统一返回首字母大写的驼峰命名,比如formstyle而不是formstyle

 

返回给前端样式数据整合Swagger

 

数据除了formstyle和tablestyle,还额外多了个myparameter

 

返回给前端样式数据整合Swagger

 

对应这种情况,我们继承returndata<t, l, o>进行扩展即可,如果还需对增加的属性进行说明,就在定义一个泛型即可

communicationtabledata

@data
@equalsandhashcode(callsuper = true)
@apimodel
public class communicationtabledata<t, l, o> extends returndata<t, l, o> {
    @apimodelproperty(value = "本岛相关信息(小岛id,小岛地址)")
    private jsonobject myparameter;
}

 

返回的数据为里面那层(tablestyle)

比如数据包里面

 

返回给前端样式数据整合Swagger

 

看着像tablestyle,但是又比tablestyle多了几个属性,那我们就可以自定义一个returndata,让它直接继承tablestyle,再做扩展

或者不继承tabledata,直接写一个returndata类,里面包含这些属性

返回给前端样式数据整合Swagger
@data
@apimodel
public class tabledata<l,s,o> {
    @jsonproperty("preferencefields")
    @apimodelproperty(value = "默认展示的表头信息")
    private list<string> preferencefields ;

    @apimodelproperty(value = "搜索表单字段集合")
    private s searchformdataorder ;

    @apimodelproperty(value = "可配置数据")
    @jsonproperty("preferencedisable")
    private string preferencedisable ;


    @apimodelproperty(value = "表格数据总数")
    private int total;

    @apimodelproperty(value = "表格中具体某条数据")
    @jsonproperty("overviewlist")
    private list<o> overviewlist;

    @jsonproperty("listheader")
    @apimodelproperty(value = "表头数据集合")
    private l listheader;
}

 

返回的数据为里面那层(formstyle)

比如通讯地址编辑界面

 

返回给前端样式数据整合Swagger

 

看着结构就是formstyle,但是returndata中的两个属性都是formstyle(一般是一个formstyle和一个tablestyle),针对这种情况,我们直接写一个新的returndata

返回给前端样式数据整合Swagger
/**
 * @param <t> basegenericeditdata
 * @param <l> communicationgenericeditdata
 * @description:
 * @author: 张重虎
 * @date: 2021/6/2 15:43
 * @copyright: xi'an dian tong software co., ltd. all rights reserved.
 * @version 1.0
 */
@data
@apimodel
public class communicationeditdata<t,l> {

    @apimodelproperty(value = "基础样式")
    @jsonproperty("base")
    private formstyle<t> base;

    @apimodelproperty(value = "通讯地址样式")
    @jsonproperty("communicationconfig")
    private formstyle<l> communicationconfig;
}

 

但是这两个formstyle里面的属性不一致,所以我们需要分开来定义两个泛型

 

返回给前端样式数据整合Swagger

 

上面两个泛型,其实都是可以通过数据表的dao实体类控制,直接传实体类进去即可。但是为了方便区分,我定义了两个泛型 <t> basegenericeditdata,<l> communicationgenericeditdata

basegenericeditdata:

返回给前端样式数据整合Swagger
@data
@apimodel
public class basegenericeditdata<t> {

    @apimodelproperty(value = "名称")
    private t name;

    @apimodelproperty(value = "是否用与中联bh")
    @jsonproperty("isonlyforzlbh")
    private t isonlyforzlbh;

    @apimodelproperty(value = "远程系统id")
    @jsonproperty("remotesystemid")
    private t remotesystemid;

    @apimodelproperty(value = "通讯地址")
    @jsonproperty("communicationaddress")
    private t communicationaddress;

    @apimodelproperty(value = "通讯key")
    @jsonproperty("communicationkey")
    private t communicationkey;

    @apimodelproperty(value = "有效id")
    @jsonproperty("validid")
    private t validid;
}

 

communicationgenericeditdata:

@data
@apimodel
public class communicationgenericeditdata<t> {
    @jsonproperty("requesttimes")
    @apimodelproperty(value = "每分钟最大请求次数")
    private t requesttimes;

    @apimodelproperty(value = "发送超时时限")
    private t overtime;

    @apimodelproperty(value = "是否重连")
    @jsonproperty("isreconnection")
    private t isreconnection;

    @apimodelproperty(value = "是否自动重连")
    @jsonproperty("reconnectiontimes")
    private t reconnectiontimes;

    @apimodelproperty(value = "自动重连次数")
    @jsonproperty("reconnectioninterval")
    private t reconnectioninterval;

    @apimodelproperty(value = "日志等级")
    @jsonproperty("loglevel")
    private t loglevel;
}

 

如小岛的转入转出规则中,preferencefields在前端展示成了小写。

 

返回给前端样式数据整合Swagger

 

而模板中preferencefields是大写,对于这种情况,是以前遗留的问题,没有较好的规范,导致大小写很随意。

 

返回给前端样式数据整合Swagger

 

对于这种情况,我们肯定不能因为一个字段就重写整个类。这时候,我们只需要继承tablestyle,然后把改字段重写即可。

 

 返回给前端样式数据整合Swagger

 

返回的数据为其他数据

其他复杂的界面,如果包含了基础的returndata属性,先继承,在写一个returndata类做其他扩展属性,否则根据具体情况,自定义returndata

举例1

小岛通讯地址:getfromdataforaddorupdata

 

返回给前端样式数据整合Swagger

 

没整合swagger之前,返回值泛型是jsonobjec,直接返回jsonres

 

返回给前端样式数据整合Swagger

 

整合之后,泛型jsonobject就变为具体的对象communication< >对象