当前位置: 首页 > article >正文

Swagger2 自定义排序

分享一下SpringSwagger2在线文档自定义排序的代码。这里参考swagger2 接口排序_swagger接口排序-CSDN博客提供的思路并在此基础上做了优化。1、引用pom信息!--swagger依赖(pojo注解)-- dependency groupIdio.swagger/groupId artifactIdswagger-annotations/artifactId version1.5.20/version /dependency !--生成后端开发文档-- dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version2.7.0/version exclusions exclusion artifactIdjackson-annotations/artifactId groupIdcom.fasterxml.jackson.core/groupId /exclusion /exclusions /dependency !--第三方生成后端开发文档页面UI-- dependency groupIdcom.github.xiaoymin/groupId artifactIdswagger-bootstrap-ui/artifactId version1.9.6/version /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency2、未排序效果现有3个接口模块Api(tags 用户用户相关接口) RestController RequestMapping(/system/user) public class UserController{ /** 列表 */ ApiOperation(value 列表, notes ) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } ApiOperation(value 新增用户, notes ) ApiImplicitParams({ }) PostMapping(/addUser) public ReturnMap addUser(RequestBody User user, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }Api(tags 系统字典相关接口) RestController RequestMapping(/system/dict) public class DictController{ /** 列表 */ ApiOperation(value 列表, notes ) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } //更新角色 ApiOperation(value 新增字典, notes ) ApiImplicitParams({ }) PostMapping(/addDict) public ReturnMap addDict(RequestBody Dict dict, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }Api(tags 系统字典类型相关接口) RestController RequestMapping(/system/dictType) public class DictTypeController{ /** 列表 */ ApiOperation(value 列表, notes ) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } //新增角色 ApiOperation(value 新增字典类型, notes ) ApiImplicitParams({ }) PostMapping(/addDictType) public ReturnMap addDictType(RequestBody DictType dictType, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }Swagger2显示如下期望展示顺序如下3、自定义排序改造3.1 添加配置类Swagger2CustomSort并继承ServiceModelToSwagger2MapperImplAPI模块的排序使用tag名称排序在名称前加上前缀0X0X_##_即在名称就加上0101_##_、0102_##_、0201_##_、0202_##_。但为了页面展示效果在排序后把前缀进行处理。接口的排序使用ApiOperation的position实现。import com.google.common.base.Optional; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import io.swagger.models.Operation; import io.swagger.models.Path; import io.swagger.models.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import springfox.documentation.builders.BuilderDefaults; import springfox.documentation.service.ApiDescription; import springfox.documentation.service.ApiListing; import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl; import springfox.documentation.swagger2.mappers.VendorExtensionsMapper; import java.util.*; /** * 自定义排序 * * 经过代码跟踪分析总结如下 * 1.API模块的排序是依据tag 的名称进行的虽然Api里保留有position属性但是已经完全弃用。 * 2.接口的排序也是依据ApiOperation里value的值进行的position属性虽然废弃但是仍可以进行设置取值。 * * 解决办法如下 * 1.API模块的排序使用tag名称排序在名称前加上前缀0X0X_##_即在名称就加上0101_##_、0102_##_、0201_##_、0202_##_。但为了页面展示效果在排序后把前缀进行处理; * 2.接口的排序使用ApiOperation的position实现。 * * author https://blog.csdn.net/jinhf10/article/details/103684895 */ Primary //同一个接口可能会有几种不同的实现类而默认只会采取其中一种的情况下 Component(ServiceModelToSwagger2Mapper) Order(Ordered.HIGHEST_PRECEDENCE) public class Swagger2CustomSort extends ServiceModelToSwagger2MapperImpl { //API接口排序序号识别 private static final String API_SORT_PREFIX _##_; Autowired private VendorExtensionsMapper vendorExtensionsMapper; protected MapString, Path mapApiListings(MultimapString, ApiListing apiListings) { MapString, Path paths Maps.newTreeMap(); Iterator var3 apiListings.values().iterator(); while (var3.hasNext()) { ApiListing each (ApiListing) var3.next(); ListApiDescription list each.getApis(); Iterator var5 each.getApis().iterator(); while (var5.hasNext()) { ApiDescription api (ApiDescription) var5.next(); String position api.getOperations().get(0).getPosition(); while(position.length() 32){ position 0position; } paths.put(position - api.getPath(), this.mapOperations(api, Optional.fromNullable(paths.get(api.getPath())))); } } MapString, Path paths2 new LinkedHashMap(); for (String key : paths.keySet()) { paths2.put(key.substring(key.indexOf(-) 1), paths.get(key)); } return paths2; } private Path mapOperations(ApiDescription api, OptionalPath existingPath) { Path path (Path) existingPath.or(new Path()); Iterator var4 BuilderDefaults.nullToEmptyList(api.getOperations()).iterator(); while (var4.hasNext()) { springfox.documentation.service.Operation each (springfox.documentation.service.Operation) var4.next(); Operation operation this.mapOperation(each); path.set(each.getMethod().toString().toLowerCase(), operation); } return path; } protected Operation mapOperation(springfox.documentation.service.Operation from) { if (from null) { return null; } else { Operation operation new Operation(); operation.setSecurity(this.mapAuthorizations(from.getSecurityReferences())); operation.setVendorExtensions(this.vendorExtensionsMapper.mapExtensions(from.getVendorExtensions())); operation.setDescription(from.getNotes()); String position from.getPosition(); while(position.length() 32){ position 0position; } operation.setOperationId(position from.getUniqueId()); operation.setResponses(this.mapResponseMessages(from.getResponseMessages())); operation.setSchemes(this.stringSetToSchemeList(from.getProtocol())); SetString set from.getTags(); if (set ! null) { IteratorString it set.iterator(); SetString rset new HashSet(); while (it.hasNext()){ String tagName it.next(); if(API_SORT_PREFIX!null !.equals(API_SORT_PREFIX)){ if(tagName!null !.equals(tagName) tagName.indexOf(API_SORT_PREFIX)0){ rset.add(tagName.substring(tagName.indexOf(API_SORT_PREFIX) API_SORT_PREFIX.length())); }else{ rset.add(tagName); } }else{ rset.add(tagName); } } operation.setTags(new ArrayList(rset)); } else { operation.setTags((List) null); } operation.setSummary(from.getSummary()); SetString set1 from.getConsumes(); if (set1 ! null) { operation.setConsumes(new ArrayList(set1)); } else { operation.setConsumes((List) null); } SetString set2 from.getProduces(); if (set2 ! null) { operation.setProduces(new ArrayList(set2)); } else { operation.setProduces((List) null); } operation.setParameters(this.parameterListToParameterList(from.getParameters())); if (from.getDeprecated() ! null) { operation.setDeprecated(Boolean.parseBoolean(from.getDeprecated())); } return operation; } } Override protected ListTag tagSetToTagList(Setspringfox.documentation.service.Tag set) { ListTag tlist super.tagSetToTagList(set); Collections.sort(tlist, new ComparatorTag() { Override public int compare(Tag t1, Tag t2) { return t1.getName().compareTo(t2.getName()); } }); ListTag result new LinkedList(); IteratorTag it tlist.iterator(); while (it.hasNext()) { Tag tag it.next(); Tag tt new Tag(); if(API_SORT_PREFIX!null !.equals(API_SORT_PREFIX)){ if(tag.getName()!null !.equals(tag.getName()) tag.getName().indexOf(API_SORT_PREFIX)0){ tt.setName(tag.getName().substring(tag.getName().indexOf(API_SORT_PREFIX) API_SORT_PREFIX.length())); }else{ tt.setName(tag.getName()); } }else{ tt.setName(tag.getName()); } tt.setDescription(tag.getDescription()); result.add(tt); } return result; } }3.2 接口Controller调整做如下调整具体代码如下Api(tags 00101_##_用户用户相关接口) RestController RequestMapping(/system/user) public class UserController{ /** 列表 */ ApiOperation(value 列表, notes , position 1) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } ApiOperation(value 新增用户, notes , position 2) ApiImplicitParams({ }) PostMapping(/addUser) public ReturnMap addUser(RequestBody User user, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }Api(tags 00202_##_系统字典相关接口) RestController RequestMapping(/system/dict) public class DictController{ /** 列表 */ ApiOperation(value 列表, notes , position 1) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } //更新角色 ApiOperation(value 新增字典, notes , position 2) ApiImplicitParams({ }) PostMapping(/addDict) public ReturnMap addDict(RequestBody Dict dict, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }Api(tags 00201_##_系统字典类型相关接口) RestController RequestMapping(/system/dictType) public class DictTypeController{ /** 列表 */ ApiOperation(value 列表, notes , position 1) ApiImplicitParams({ ApiImplicitParam(name pageNum, value 页码, dataType int, paramType query), ApiImplicitParam(name pageSize, value 页面大小, dataType int, paramType query), ApiImplicitParam(name type, value 标签类型, dataType String, paramType query), ApiImplicitParam(name name, value 标签名称, dataType String, paramType query), ApiImplicitParam(name invalid, value 状态, dataType int, paramType query), }) PostMapping(/list) public ReturnMap list(Integer pageNum, Integer pageSize, String type, String name, Integer invalid, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); MapString, Object data new HashMapString, Object(); returnMap.setData(data); returnMap.success(); return returnMap; } //新增角色 ApiOperation(value 新增字典类型, notes , position 2) ApiImplicitParams({ }) PostMapping(/addDictType) public ReturnMap addDictType(RequestBody DictType dictType, HttpServletRequest request, HttpServletResponse response){ ReturnMap returnMap new ReturnMap(); returnMap.success(); return returnMap; } }4、自定义排序效果重新编译运行后Swagger2显示如下

相关文章:

Swagger2 自定义排序

分享一下SpringSwagger2在线文档自定义排序的代码。 这里参考swagger2 接口排序_swagger接口排序-CSDN博客提供的思路&#xff0c;并在此基础上做了优化。 1、引用pom信息 <!--swagger依赖(pojo注解)--><dependency><groupId>io.swagger</groupId>&l…...

C语言简易计算器程序的实现与优化

目录 一、基础版本&#xff1a;简单直接的功能实现 完整代码 版本分析 优点 缺点 二、进阶版本&#xff1a;函数指针数组优化 完整代码 版本分析 核心优化点 优点 三、改进版本&#xff1a;功能解耦与模块化 完整代码 版本分析 核心设计思想&#xff1a;模块化解…...

优秀堡垒机功能学习

用户管理 1. 用户&#xff0c;角色 2. 资产授权给角色&#xff08;用户&#xff09;资源管理 1. 新建&#xff1a;新建&#xff0c;导入&#xff0c;同步第三方云&#xff0c;同步用户自己的系统 2. 更新&#xff1a;定时同步&#xff0c;定时检测状态 3. Group&#xff1a;资源…...

Coredump-X: movaps 可能会导致 段错误(SIGSEGV)

文章目录 简介 需要注意这种情况。 gcc 代码片段 GCC的选择 movups movaps -mpreferred-stack-boundary=num intel 文档说明 简介 这个情况,还是第一次看到,gcc在做优化的时候,对于memset函数,可能使用sse相关的movups/movaps这种指令来提升性能,但是这两个指令的区别是m…...

企业决策视角下微服务全链路性能瓶颈分析平台对比及实践指南

核心观点摘要 微服务架构提升了业务弹性&#xff0c;却因跨服务调用链的不可见性造成性能盲区&#xff0c;需借助全链路性能分析平台实现端到端可观测与瓶颈定位。全链路性能分析&#xff0c;是指采集并关联从前端入口到后端微服务的请求轨迹与资源消耗数据&#xff0c;其核心特…...

GARbro:视觉小说资源浏览器

GARbro&#xff1a;视觉小说资源浏览器 【免费下载链接】GARbro Visual Novels resource browser 项目地址: https://gitcode.com/gh_mirrors/gar/GARbro 项目介绍 GARbro 是一款专门用于浏览和操作视觉小说&#xff08;Visual Novels&#xff0c;简称VN&#xff09;资…...

电源动态响应测试

电源动态响应测试&#xff0c;旨在评估电源在面对快速变化负载和电压条件时的性能表现。确保电源系统能够在系统负载发生瞬时变化时快、有效的调整输出电压&#xff0c;仍然提供稳定、可靠的电源输出&#xff0c;以维持整个系统的稳定性和可靠性。电源上升通道和下降通道测试。…...

UE 最全FString字符串与各格式转换 输出

一、UE4 Source Header References CString.h UnrealString.h NameTypes.h StringConv.h (TCHAR_TO_ANSI etc) CString.h可以查到更多&#xff0c;如 atoi64 (string to int64) Atod (string to double precision float) 二、日志打印 1.输出字符串到output log中 1.1 最…...

UE 树形图 C++版

1.创建以下三个C类(1)UTreeViewItemBase(基类UObject)UCLASS() class UTreeViewItemBase : public UObject {GENERATED_BODY() public:UTreeViewItemBase();virtual ~UTreeViewItemBase() override; public:FString Id;//层级int32 Level;//标签FText Label;//与自身对应的Acto…...

UE 树形图(Tree View)_1

一.树形图介绍1.所需类型(1)TreeView控件:作为树形图主体,后面简称树形图(2)EntryWidget:本质是一个UserWidget,作为树形图中的子元素存在,必须要实现UserObjectListEntry接口,否则无法作为树形图的子元素.后面简称Entry(3)TreeViewItem:EntryWidget对应的信息or实体,基类为UOb…...

华为OD机试双机位C卷-生成哈夫曼树 (Py/Java/C/C++/Js/Go)

生成哈夫曼树 华为OD机试双机位C卷 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大…...

Java毕业设计基于springboot的智能推荐旅游平台95722270

前言 在个性化消费时代背景下&#xff0c;旅游市场的需求日益多样化和个性化。传统的旅游推荐方式已经难以满足游客对个性化、精准化服务的需求。因此&#xff0c;开发一个基于Spring Boot的智能推荐旅游平台具有重要意义。该平台能够综合分析游客的旅行偏好、时间安排、预算限…...

Java毕业设计基于springboot+Java株洲崔氏服装有限公司服装生产管理信息系统

前言 随着株洲崔氏服装有限公司业务的不断发展&#xff0c;传统的生产管理方式已难以满足高效、精准的管理需求。因此&#xff0c;公司决定采用现代信息技术&#xff0c;设计与实现一个服装生产管理信息系统&#xff0c;以实现对服装生产全过程的信息化管理&#xff0c;提高生产…...

JAVA EE(进阶)_CSS

人与人之间总是渐渐疏离 ——陳長生. ❀主页&#xff1a;陳長生.-CSDN博客❀ &#x1f4d5;上一篇&#xff1a;JAVA EE(进阶)_HTML-CSDN博客 1.CSS 1.1.介绍 如果说HTML是前端的骨架&#xff0c;那么CSS就是前端的外表 可以做到…...

Java毕业设计基于springboot的某炼油厂盲板管理系统

前言 在炼油厂的生产过程中&#xff0c;盲板的管理是一个至关重要的环节。传统的盲板管理方式往往依赖于人工记录和跟踪&#xff0c;这种方式不仅效率低下&#xff0c;而且容易出错。为了提高盲板管理的效率和安全性&#xff0c;炼油厂引入了基于Spring Boot的盲板管理系统。该…...

如何快速上手Motion UI:从安装到第一个动画效果的简单教程

如何快速上手Motion UI&#xff1a;从安装到第一个动画效果的简单教程 【免费下载链接】motion-ui &#x1f48e; The powerful Sass library for creating CSS transitions and animations 项目地址: https://gitcode.com/gh_mirrors/mo/motion-ui Motion UI是一个功能…...

GoMLX核心组件解析:从张量操作到神经网络层

GoMLX核心组件解析&#xff1a;从张量操作到神经网络层 【免费下载链接】gomlx GoMLX -- Accelerated ML Libraries for Go 项目地址: https://gitcode.com/gh_mirrors/go/gomlx GoMLX是Go语言生态中一款强大的加速机器学习库&#xff0c;它提供了从底层张量操作到高层神…...

double-conversion深度解析:从V8引擎到高效IEEE浮点数转换库

double-conversion深度解析&#xff1a;从V8引擎到高效IEEE浮点数转换库 【免费下载链接】double-conversion Efficient binary-decimal and decimal-binary conversion routines for IEEE doubles. 项目地址: https://gitcode.com/gh_mirrors/do/double-conversion dou…...

TDL vs DSEFix:哪种Windows驱动签名绕过工具更适合你?深度对比分析

TDL vs DSEFix&#xff1a;哪种Windows驱动签名绕过工具更适合你&#xff1f;深度对比分析 【免费下载链接】TDL Driver loader for bypassing Windows x64 Driver Signature Enforcement 项目地址: https://gitcode.com/gh_mirrors/tdl1/TDL 在Windows系统开发中&#…...

为什么选择Torch?Elixir开发者必备的5大理由与优势分析

为什么选择Torch&#xff1f;Elixir开发者必备的5大理由与优势分析 【免费下载链接】torch A rapid admin generator for Elixir & Phoenix 项目地址: https://gitcode.com/gh_mirrors/tor/torch Torch是Elixir和Phoenix框架生态中一款强大的快速管理后台生成工具&a…...

【WIN开发】04 四种文件操作之注册表编程

一、什么是注册表? 注册表就是Windows系统的档案室! 按 Win + R 键 输入 regedit 回车即可打开注册表编辑器二、注册表的结构 2.1 五大根键(就像五个大柜子) 根键 缩写 存放什么 HKEY_CLASSES_ROOT HKCR 文件类型、扩展名关联 HKEY_CURRENT_USER HKCU 当前用户的设置 HK…...

华为OD机试双机位C卷-出错的或电路 (C/C++/Py/Java/Js/Go)

出错的或电路 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 华为OD机试双机位C卷 华为OD上机考试双机位C卷 100分题型 题目描述 某生产门电路的厂商发现某一批次的或门电路不稳定,具体现象为计算两个二进制数的或操作时…...

JAVA EE初阶 2: 多线程-初阶

1.认识线程&#xff08;Thread&#xff09;1.1 概念1.2 创建线程&#xff08;1&#xff09; 方法1 - 继承Thread类【 Ctrl C 取消 终止 】&#xff08;2&#xff09; 方法2 - 实现Runnable接口&#xff08;3&#xff09; 总结&#xff08;4&#xff09; 匿名内部类&#xff0…...

python --飞浆离线ocr使用/paddleocr

python 3.10.3 和 飞浆ocr 3.2使用 依赖 paddlepaddle3.2.0 paddleocr3.2.0运行测试 paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png --use_doc_orientation_classify False --use_doc_unwarping False --use_text…...

稳转细胞株构建全攻略:从理论到实践的生物制药核心技术解析

为何稳转细胞株成为生物制药领域的“兵家必争之地”&#xff1f;稳转细胞株被称为“药物研发的基石”&#xff0c;是单克隆抗体、双抗、疫苗、ADC等生物制品规模化生产的核心环节&#xff0c;还是药物生产成本、效率和质量的关键决定因素。一株高产稳定的细胞株有可能直接缩短药…...

PHing配置文件完全手册:build.xml编写指南与示例

PHing配置文件完全手册&#xff1a;build.xml编写指南与示例 【免费下载链接】phing PHing Is Not GNU make; its a PHP project build system or build tool based on Apache Ant. 项目地址: https://gitcode.com/gh_mirrors/ph/phing PHing是一款基于Apache Ant的PHP项…...

laravel-menu性能优化:高效生成与缓存策略

laravel-menu性能优化&#xff1a;高效生成与缓存策略 【免费下载链接】laravel-menu A quick way to create menus in Laravel 项目地址: https://gitcode.com/gh_mirrors/la/laravel-menu laravel-menu是一款专为Laravel框架设计的菜单生成工具&#xff0c;能够帮助开…...

2026高职物联网毕业起薪一般多少?就业方向、岗位薪资与升职路径全解析

【先说结论】2026年高职物联网专业毕业生的起薪&#xff0c;通常会落在【4500元—8000元/月】这个区间。若在新一线、强二线城市&#xff0c;且具备项目经验、证书、实习经历&#xff0c;起点拿到【7000元以上】并不罕见&#xff1b;如果是制造业城市、传统中小企业&#xff0c…...

MobileCoin智能合约开发入门:构建基于隐私支付的去中心化应用

MobileCoin智能合约开发入门&#xff1a;构建基于隐私支付的去中心化应用 【免费下载链接】mobilecoin Private payments for mobile devices. 项目地址: https://gitcode.com/gh_mirrors/mo/mobilecoin MobileCoin是一个专注于移动设备隐私支付的开源项目&#xff0c;它…...

2026大专财富管理毕业工资多少?就业薪资、岗位方向与升职考证全攻略

【先说结论】2026年大专学财富管理&#xff0c;毕业后的起薪通常不会“一步到位特别高”&#xff0c;但它是一个【越做越值钱】的专业。若进入银行、证券、保险、第三方财富公司等行业&#xff0c;刚毕业月薪大多在【4500元—9000元】之间&#xff1b;如果在一线城市、业绩岗、…...