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

前端json样式对象构造参考:https://workshops.otrs365.cn/web/#/132?page_id=1248

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

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

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和TableStyle展开拼接

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;
}

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>

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

TableStyle<L,O>

@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;
}

TableStyle<L,O>使用方法TableStyle<ListHeader<ListHeaderGeneric>,Overviewlist>

特殊情况

返回的数据比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,但是又比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

举例1

小岛通讯地址:getFromDataForAddOrUpdata

没整合Swagger之前,返回值泛型是JSONObjec,直接返回jsonRes

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

返回给前端样式数据整合Swagger的更多相关文章

  1. django学习-16.返回给前端页面数据为json数据类型的3种方案

    目录结构 1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.[方案 ...

  2. 导出excel,并将数据返回给前端(包含权限判断)

    一.先写导出按钮接口 1.此接口对用户权限进行判断 2.此接口将前端的参数组合拼凑到下一个接口的url中去,用于条件筛选 3.用户有权限的情况下将用户的权限信息保存到redis中去,并将token写到 ...

  3. sessionStorage记录返回前端的数据,用于解决登录拦截器刷新页面的问题

    1.问题出现的场景与解决 实现一个登录拦截器,重写doFilter方法,判断用户的登录状态,在用户长时间未操作或者异地登录时前端进行提示,完整代码如下 public class LoginValida ...

  4. [前后端分离项目]thinkphp返回给前端数据为字符串

    写在前面:现在项目大多是采用前后端分离的模式进行开发,这种模式下的开发大大的提高了工作效率,而进行前后端数据交互传输的格式基本以json为主,毕业设计中兼顾前端开发和后端开发(后端小白一个),前端业务 ...

  5. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作

    相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...

  6. Spring Boot初识(3)- Spring Boot整合Swagger

    一.本文介绍 如果Web项目是完全前后端分离的话(我认为现在完全前后端分离已经是趋势了)一般前端和后端交互都是通过接口的,对接口入参和出参描述的文档就是Mock文档.随着接口数量的增多和参数的个数增加 ...

  7. 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据

    跟同事合作前后端分离项目,自己对 WebApi 的很多知识不够全,虽说不必要学全栈,可是也要了解基础知识,才能合理设计接口.API,方便与前端交接. 晚上回到宿舍后,对 WebApi 的知识查漏补缺, ...

  8. SpringBoot整合Swagger和Actuator

    前言 本篇文章主要介绍的是SpringBoot整合Swagger(API文档生成框架)和SpringBoot整合Actuator(项目监控)使用教程. SpringBoot整合Swagger 说明:如 ...

  9. SpringBoot学习之整合Swagger

    Swagger介绍 1.什么是Swagger 作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之 ...

随机推荐

  1. 【pytest官方文档】解读fixtures - 10. fixture有效性、跨文件共享fixtures

    一.fixture有效性 fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到.比如,在类里面定义了一个fixture, 那么就只能是这个类中的测试函数才可以请求 ...

  2. Java多线程详解——一篇文章搞懂Java多线程

    目录 1. 基本概念 2. 线程的创建和启动 2.1. 多线程实现的原理 2.2.多线程的创建,方式一:继承于Thread类 2.3.多线程的创建,方式一:创建Thread匿名子类(也属于方法一) 2 ...

  3. 1082 Read Number in Chinese

    Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese ...

  4. 反调试——Windows异常-SEH

    反调试--Windows异常-SEH 概念: SEH:Structured Exception Handling SEH是Windows默认的异常处理机制 如何使用 在代码中使用 __try​​__e ...

  5. 【Nginx(四)】Nginx配置集群 负载均衡策略

    1.Nginx常见的负载均衡策略 ip_hash (固定分发) 简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器 场景:服务器业务分区.业务缓存.Session需要 ...

  6. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

    前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...

  7. Android进程so注入Hook java方法

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53769331 Andorid的Hook方式比较多,现在来学习下,基于Android ...

  8. UVA11300分金币

    题意:      圆桌旁作者n个人,每个人都有一定数量的金币,他们每次可以给相邻的人一枚金币(可以给多次),问所有人金币数都相同的话最少要给多少次金币.思路:       这个题目感觉很好,首先我们可 ...

  9. Linux系统登录相关

    whoami:查看当前用户 who:查看当前登录系统的所有用户 tty指的是主机的图形化界面的面板 pts/x指的是远程ssh连接的窗口 who -b:主机的上一次启动时间 w:显示已经登陆系统的用户 ...

  10. 附近的人?你zao吗?

    前几天收到一个新的需求,需要实现类似"附近的人"的功能:根据自己当前的定位,获取距离范围内的所有任务地点.刚看到这个需求时有点懵逼,第一想到的就是要利用地球的半径公式去计算距离,也 ...