返回给前端样式数据整合Swagger
对于前端样式整合swagger,只对接口做增强,不对接口逻辑做修改,当json样式拼接完成,我们把json转为对应的实体类即可。
前端json样式对象构造参考:
针对前端样式,此次抽出5个公共模块类,下面对这些类进行展开叙述
returndata<t,l,o>
/** * @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里面有两个基本属性: data和order。data里面是一个个order对象,对象里面是具体的属性
formstyle<t>
@lombok.data @apimodel public class formstyle<t> { @apimodelproperty(value = "页面表单字段具体样式") private t data; @apimodelproperty(value = "页面表单展示字段") private list<string> order; }
data对应一个泛型,泛型里面定义data的基本属性,一般以下属性就够了,多的在继承这个类,然后进行扩展即可
formstyledatageneric:
@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里面的属性对应前端界面效果
formstyle<t> ,t 如果formstyledatageneric里面的属性不满足,则自定义一个即可
使用方法 formstyle<formstyledatageneric>
@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>对应页面属性说明
看得出来,tablestyle<l,o>里面有两个泛型,如果基本的属性满足不了我们,我们自定义一个类,然后传进去即可。另外,泛型o一般是对应我们数据表的那个dao实体类,直接传进去即可
泛型l,l代表listheader里面的属性,就是表头字段的属性,在小岛这里看不出来,我们用另一个界面对这些属性进行解读。
定义listheader<t>的时候,我们根据数据表dao去定义属性,然后加上泛型t即可
listheader<t> , 这个t我们一般传listheadergeneric就够了,如果需要添加其他字段,就自定义一个泛型,往里面传即可
@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
@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; }
返回的数据比returndata更多
以communication通讯地址为例
ps:以后统一返回首字母大写的驼峰命名,比如formstyle而不是formstyle
数据除了formstyle和tablestyle,还额外多了个myparameter
对应这种情况,我们继承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,但是又比tablestyle多了几个属性,那我们就可以自定义一个returndata,让它直接继承tablestyle,再做扩展
或者不继承tabledata,直接写一个returndata类,里面包含这些属性
@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)
比如通讯地址编辑界面
看着结构就是formstyle,但是returndata中的两个属性都是formstyle(一般是一个formstyle和一个tablestyle),针对这种情况,我们直接写一个新的returndata
/** * @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里面的属性不一致,所以我们需要分开来定义两个泛型
上面两个泛型,其实都是可以通过数据表的dao实体类控制,直接传实体类进去即可。但是为了方便区分,我定义了两个泛型 <t> basegenericeditdata,<l> communicationgenericeditdata
basegenericeditdata:
@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在前端展示成了小写。
而模板中preferencefields是大写,对于这种情况,是以前遗留的问题,没有较好的规范,导致大小写很随意。
对于这种情况,我们肯定不能因为一个字段就重写整个类。这时候,我们只需要继承tablestyle,然后把改字段重写即可。
其他复杂的界面,如果包含了基础的returndata属性,先继承,在写一个returndata类做其他扩展属性,否则根据具体情况,自定义returndata
没整合swagger之前,返回值泛型是jsonobjec,直接返回jsonres
整合之后,泛型jsonobject就变为具体的对象communication< >对象