对于前端样式整合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. Day11_57_自定义泛型

    自定义泛型 package com.shige.Generic; //自定义泛型 public class CustomizeGeneric { public static void main(Str ...

  2. 一文上手Python3

      案例参考:廖雪峰--Python教程   基础知识 基本数据类型   用type()来判断数据类型: In [1]: type(1) Out[1]: int In [2]: type(1.0) O ...

  3. @unittest.skip(reason):强制跳转。reason是跳转原因

    在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...

  4. hdu1671 字典树记录前缀出现次数

    题意:       给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 123456789 123,那么这两个电话号就冲突了,直接输出NO. 思 ...

  5. Android常见App加固厂商脱壳方法的整理

    目录 简述(脱壳前学习的知识.壳的历史.脱壳方法) 第一代壳 第二代壳 第三代壳 第N代壳 简述 Apk文件结构 Dex文件结构 壳史 壳的识别 Apk文件结构 Dex文件结构 壳史 第一代壳 Dex ...

  6. DLL内存加载

    动态加载dll 功能:      把一个处于内存里的dll直接加载并且使用. 用途:      免杀(静态文件查杀),外挂(防止游戏自己hook了loadlibrary等函数),以及其他. 原理:  ...

  7. MetInfo Password Reset Poisoning By Host Header Attack

    if we know some user's email, the we will can reset the user's email by host header attack. The atta ...

  8. Mac TouchBar 自定义工具-MTMR

    Github Install brew cask install mtmr 官网

  9. 手把手教你掌握——性能工具Jmeter之参数化(含安装教程 )

    本节大纲 Jmeter 发送get/post请求 Jmeter 之文件参数化-TXT/Csv Jmeter之文件参数化-断言 JMeter简介 Apache JMeter是一款基于JAVA的压力测试T ...

  10. 改善c++程序的150个建议(读后总结)-------19-26

    19. 明白在c++中如何使用c c++可以兼容c的绝大部分代码,但是还是有一部分不能兼容. c语言的编译器在调用函数时会把函数翻译成 : "_函数名",例如: int nasa( ...