前几天,TJ被领导喷了,原因是代码里注释太少,导致写的SDK在生成JavaDoc文档的时候,有价值的说明内容太少,以后维护不方便。于是马上着实去优化这个是,现在是AI时代了,肯定不能死做,第一反应就是去找找看是否有直接可以用的工具。
于是,我找到了这么个IDEA插件:Easy Javadoc
大家有需要的可以直接打开IDEA,在plugins市场里搜索,就能获得。
在安装完插件之后,您只需要记住下面这些快捷键,然后就可以去代码里自动生成了:
下面跟着动图演示,来体验一下该插件快速生成JavaDoc的能力:
可以看到,它的主要功能就是根据函数名称、参数名称等代码层面的信息,通过翻译,自动生成相关的中文注释。所以,虽然有插件的辅助,但开发者还是要有良好的编码习惯,写能让人看得懂的参数定义、方法定义。这样,后续的其他自动化生成工具就都能完美的用上,来提高我们的工作效率了。
由于该插件会用到翻译功能,所以各位用户还要去选择和配置一下你需要使用的翻译API,每个供应商每月都有免费额度,对于个人来说,都足够使用了,下面是主流的一些翻译API,需要的可以自取:
好了,今天的分享就到这里,感兴趣的可以根据下面相关链接了解更多内容:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>+
拼接StringBuffer
和SpringBuilder
String::format
and String::formatted
java.text.MessageFormat
下面,我们一起来学习一下Java 21中的新方案!如果您对于上面这些还不熟悉的话,建议可以先看一下这篇《Java自带的4种字符串组织和格式化方法》,了解以前的机制,这样与最新的处理方案做对比,理解会更深刻。
在Java 21中处理字符串的新方法称为:Template Expressions,即:模版表达式。
模版表达式是Java语言中的一种新表达式。它可以执行字符串插值,帮助开发人员通过编程的方式安全高效地组织字符串。此外,模板表达式不仅仅可以用于组织字符串,它还可以根据特定模型的规则将结构化文本转换为任何类型的对象。
下面通过一个简单的案例来认识一下它:
String blog = "blog.didispace.com"; |
上述代码中的第2行就是一个模版表达式,其中主要包含三个部分:
STR
\{blog}
)的模版.
把前面两部分组合起来,形式上类似方法调用当模版表达式运行的时候,模版处理器会将模版内容与内嵌表达式的值组合起来,生成结果,所以上面案例中的字符串str在运行时的结果为:My blog is blog.didispace.com
。
还记得之前我们的Java新特性专栏中,介绍过Java 15中的文本块特性吗?类似下面这样的写法:
String html = """ |
模版表达式也支持类似的多行字符串处理,所以开发者可以用它来方便的组织html、json、xml等字符串内容,比如下面这样:
var json = STR.""" |
上面案例中我们所用的STR模版处理器中的内嵌表达式都采用了字符串内容,而实际上STR模版处理器还有更多的用途。
int x = 10, y = 20; |
最终s字符串结果为:10 + 20 = 30
String s = STR."My blog is \{getMyBlog()}"; |
假设getMyBlog方法返回的内容为blog.didispace.com
,那么最终s字符串结果为:My blog is blog.didispace.com
。
User u = new User("didi", "blog.didispace.com"); // 构造函数参数为name属性和blog属性 |
最终s字符串结果为:didi的博客地址为:blog.didispace.com
。
除了STR模版处理器之外,Java中还提供了另外一个模版处理器:FMT。FMT模版处理器除了与STR模版处理器一样提供插值能力之外,还提供了左侧的格式化处理。下面通过例子来直接理解FMT的功能:
record Rectangle(String name, double width, double height) { |
上面这块是由STR模版处理器组织字符串表格数据,从模版表达式来看是非常整齐的,但是由于模版中内嵌表达式的值长短不一,最终输出结果很有可能差强人意,比如STR模版处理器处理后的结果是这样的:
Description Width Height Area |
为了解决这个问题,就可以采用FMT模版处理器,在每一列左侧定义格式
String table = FMT.""" |
这样的结果将是如下这样,获得一个整齐的结果:
Description Width Height Area |
关于Java 21中推出的String Templates特性还有很多高级能力,比如:自定义模版处理器等。因为该特性还处于Preview阶段,所以DD也还没有深入研究,仅尝鲜了一下基本功能,如果您对其他高级能力感兴趣,也可以通过官网学习。等该功能正式发布之后,我会在 Java新特性专栏 中更新解读所有内容,欢迎关注与收藏。
]]>之前给大家推荐了很多后台模版,有读者希望推荐一些跟通用的好看组件,毕竟出了后台还有很多其他场景嘛。所以,今天继续给大家推荐一个广受好评的UI组件库:NextUI
NextUI的主要目标是简化开发流程,为增强的用户体验提供美观且适应性强的系统设计。
它有以下几点核心特性:
对于一款UI组件,是否好看是大家都特别关注的,下面就带大家一起来看看NextUI的一些常用组件效果。
由于篇幅有限,就挑选了一些常用的,还有很多其他的组件没有在这里展示,感兴趣的可以自行前往官网查看并体验动态效果。
最后,老规矩,奉上相关链接,感兴趣的可以直接去深入了解:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>最近,TJ君也正好看到一款不错的远程桌面软件,马上拿出来推荐给大家,如果有需要的可以看看。
今天要推荐的远程桌面软件就是这款叫Getscreen的软件,推荐理由挺简单,就3点:
第一步:在需要被远程连接的机器上下载它的Agent程序并启动,点击Send
获得一个链接
第二步:在其他机器上打开浏览器,使用第一步中的链接,就能轻松连上远程桌面了
使用方法是不是非常简单呢?不需要任何技术知识。
如果你有很多设备的话,还可以下载它的Dashboard来管理你的设备,使用起来会更加流畅。
Getscreen的付费机制也比较友好,对于免费用户,可以支持2个设备,相信大部分个人用户也基本够用了。
对于windows、macOS、Linux比较常规了,但是还有个Android,TJ在想是不是也能用来控制手机?这个TJ还没尝试,感兴趣的小伙伴可以试试看。
最后,老规矩,奉上相关地址;
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>先来看看具体报错(如果您也碰到这种情况,那么可以看看后面的内容):
退信原因:发件人(youtubedubbing@mail.spring4all.com)域名的DNS记录未设置或设置错误导致对方拒收此邮件。
host gmail-smtp-in.l.google.com[142.251.10.26] said: 550-5.7.26 This mail is unauthenticated, which poses a security risk to the sender and Gmail users, and has been blocked. The sender must authenticate with at least one of SPF or DKIM. For this message, DKIM checks did not pass and SPF check for [mail.spring4all.com] did not pass with ip: [54.204.34.130]. The sender should visit https://support.google.com/mail/answer/81126#authentication for instructions on setting up authentication. k191-20020a636fc8000000b00565bcd33890si6279798pgc.848 - gsmtp (in reply to end of DATA command)
解决方案:请通知你的邮箱管理员为邮箱域名设置正确的DNS(SPF、DKIM、DMARC)记录。详细请见 http://service.exmail.qq.com/cgi-bin/help?subtype=1&&no=1000580&&id=20012 。
从退信原因中Google给的链接内容非常多,大致内容就是Google针对垃圾邮件滥用邮箱等行为做的防护机制。所以,如果您要支持Gmail的话,就必须符合它所制定的身份配置要求,里面包含了:SPF配置、DKIM配置、ARC配置以及DMARC配置。
Google官方提供了一个工具:https://toolbox.googleapps.com/apps/checkmx/,可以用来检测你的一些列配置是否符合要求。您只需要输入你的邮箱域名,就可以看到如下的诊断结果:
那么多警告,显然是要慢慢解决才能不被拒收吧。。。不过那么多配置,是不是一下就晕了?
如果你懒得深入看的话,下面DD就讲一下比较快速的解决不被拒收的配置。
不要看有那么多警告和配置内容,其实只需要把SPF配置完成,Gmail的发送就不成问题了。配置方法也很简单,就是在域名解析里加一条记录即可。
Gmail官网也给出了介绍:
但第一次也许你会跟我犯一样的错,就是直接用v=spf1 include:_spf.google.com ~all
这个value了。。。其实应该要修改成你所用企业邮箱服务商的spf域名。
比如,DD这边用的是腾讯的企业邮箱,所以值要设置成:v=spf1 include:spf.mail.qq.com ~all
。直观的讲,你的域名解析里需要有这样一条TXT记录:
这边汇总一下,国内比较常用的企业邮箱SPF配置,如果您正好碰到类似问题,可以直接选取使用:
v=spf1 include:spf.mail.qq.com ~all
v=spf1 include:spf.mxhichina.com -all
v=spf1 include:spf.163.com -all
今天的分享就到这里,希望对您有所收获!码字不易,欢迎关注、收藏、分享,支持一下。本文可以任意转载,但请注明原文链接 ^_^
]]>之前给大家推荐过好几款后台模版,都很受欢迎。今天继续再给大家推荐一款非常热门、广受好评的后台模版:tabler
tabler作为一款国外的开源项目,目前已经收获了34.9K Star,含金量非常高。它的主要特点总结如下:
下面我们一起欣赏下tabler官方提供的demo:
最后,奉上相关地址,感兴趣的可以前往了解更多:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>最近身体不太舒服,好多天没写代码,也没给大家推荐好工具了。
平时我一直用Notion来记录内容为主,但也一直关注着其他开源产品。上周正好看到一款非常受欢迎的开源免费笔记,今天就推荐给大家:VNote。
VNote一个由程序员为程序员打造的开源笔记应用,基于Qt开发,专注于使用 Markdown 来写作的群体。它提供完美的编辑体验和强大的笔记管理功能,使得使用Markdown记笔记更加轻松简单。VNote将来还会支持更多的文档格式。由于Qt的支持,VNote可以高效地运行在Linux、Windows和macOS平台上。
VNote的编辑可以通过下面的几张截图来初步了解:
可以看到,VNote的界面非常简洁且符合现代审美。它支持原地预览和双边预览,方便我们查看编写效果。同时,在界面左右两侧提分别提供了文件目录和文章大纲,方便作者快速切换。
对于一些复杂的UML图、流程图、数学公式也有很好的支持,具体如下:
关于文章内容的存储,是很多作者都会关注的。VNote在这方面采用了以文件形式的本地存储,一个笔记对应一个目录。所以,用户可以自由的选择第三方同步服务来备份和同步多端工作。
怎么样,VNote是你心目中想要的笔记软件吗?
最后,老规矩,奉上相关地址:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>之前陆陆续续给大家推荐过很多后台管理模版了,但是模版这东西永远不嫌多,所以,今天再添一枚:vue-pure-admin
vue-pure-admin采用了当下最为流线的技术栈,其中主要包括:
很多热门模版一般功能都特别强大,这也导致了内容非常多,但实际很多时候我们就只要一个主体内容就可以。所以,这里值得注意的是,vue-pure-admin还提供了一个精简版本,更适合直接引入到项目作为开发初始版本。
vue-pure-admin提供的精简版打包后全局引入(包含Element-Plus的情况下)才2.3MB的大小,再利用brotli压缩之后,甚至低于350kb,可谓是极致精简了!
该模版还贴心的提供了教程视频,简直是保姆级模版了,实属难得:
接下来一起欣赏下vue-pure-admin的效果吧:
这里就简单预览一下,其实还有更多有意思的组件展示,留给大家自己去探索吧!最后,奉上相关地址,喜欢的直接冲吧!
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>+
拼接案例:
String name = "DD"; |
这种方法很容易上手,甚至可以混合使用非字符串值来一起组织。然而,结果代码编写起来非常不易阅读和维护。最大的缺点是每次我们使用+
运算符时都会分配一个新的字符串。所以,JDK中还提供了多种优化策略来减少字符串的创建,比如下面的方案2。在工作中,要尽量避免使用方案1,而是下面的方案。
StringBuffer
和SpringBuilder
案例:
String name = "DD"; |
StringBuffer
和StringBuilder
是专门用于字符串连接的实现类,它们都提供了用于插入、替换和查找字符串的方法。但它们之间还有一定区别,StringBuffer
是线程安全的,而StringBuilder
则不是,所以在使用的时候要注意场景。
String::format
and String::formatted
案例:
String name = "DD"; |
String
类本身也提供了一些格式化方法,比如:
static String format(String format, Object... args)
static String format(Locale locale, String format, Object... args)
String formatted(Object... args) (Java 15+)
这些方法是以模版的方式来实现字符串的拼接,可以有效地节省字符串创建的数量。
java.text.MessageFormat
案例:
String name = "DD"; |
MessageFormat
类型与上面String
本身自带的format有点类似,但语法风格上有很大的差别。MessageFormat
的参数风格有点像slf4j,而String
自带的format风格更像C语言中的print。
除了这些JDK自带的方案之外,还有很多开发者自己封装的处理方法,后面再总结一些优秀的封装,感兴趣的记得关注下程序猿DD或者收藏我的博客。
]]>利用AI帮你读文章、利用AI帮你分析非结构化数据,这些最为潮流的AI辅助工具,相信很多读者都在各种媒体上看到过了。但还是有不少人并没有真正的使用过,这里有很多原因导致,具体就不细说了,懂的都懂。
今天TJ就给大家推荐一个你可以在线使用,也可以自己搭建的AI辅助工具:Quivr。Quivr几乎可以处理任何类型的数据,包括:文本、图像、代码、音视频。采用GPT来检索和输出。以速度和效率为核心设计,确保快速访问处理您的数据并为您服务。
下面就来一起认识和体验一下它吧!
Quivr上手非常简单,可以直接通过官网网站登录之后,上传一个你要让AI学习的文件:
对于上传文件,目前已经支持以下文本和音视频内容:
上传完成之后,进入聊天框,你就可以直接对AI进行提问了,Quivr会根据学习到的内容来回答您:
对于AI的配置还可以通过右下角的设置按钮做进一步微调,比如:采用更高级的GPT-4模型:
在线使用是不是很简单呢?
如果你还有更高的需求,比如:自己搭建的话,可以进入它的开源项目,部署自己的服务或者基于其做二次开发:
最后,奉上相关链接,感兴趣的小伙伴,赶紧冲吧!
开源地址:https://github.com/StanGirard/quivr
官网网站:https://www.quivr.app
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>推荐内网穿透的文章已经很多很多,还有很多大合集的推荐,但也因为推荐的太多,也会让人眼花缭乱,不断尝试不断受挫。有的接受不了收费、有的配置繁琐,有的运行不稳定,还有的有病毒。
这里DD就不多推荐了,只推荐一个个人认为最好用的,那就是:ngrok 。只需要一行命令就能帮你轻松实现内网穿透!
下面你可以跟着我的操作来完成第一次使用:
从官网(https://ngrok.com/)右上角 Sign Up 进入,完成庄户注册。如果您跟我一样是开发者的话,直接GitHub授权登录,快得很!
完成注册并登录之后,可以看到Dashboard中就给出了使用的三个步骤:
是不是超级简洁?接下来就来一起完成这三步!
进入官网的下载页面:https://ngrok.com/download
官方清晰地给出了各个系统的安装方法:
个人推荐直接下载ZIP包,然后直接解压,这种方式最为迅速!
直接复制Dashboard中第二步的ngrok config add-authtoken xxxxx
命令,然后打开终端,定位到之前解压ngrok的位置执行它!
终端会输出为你保存的配置路径,具体如下:
Authtoken saved to configuration file: /Users/zhaiyongchao/Library/Application Support/ngrok/ngrok.yml |
执行命令启动内网穿透:
ngrok http 8080 |
这里没用dashboard的80端口,因为我们写Java应用一般都是8080嘛,如果你本地的服务用了其他端口,记得修改一下就可以了。
此时,终端也变了一副画面,具体如下:
你需要关注一下其中的Forwarding内容,后面的域名就是用来通过公网访问您本地8080端口应用接口的地址了。
是不是超级方便?有没有比国内的那些换皮产品好多了?
]]>对于个人建站来说,WordPress相信很多读者都知道了。但WordPress很多时候我们还是用来建立自主发布内容的站点为主,适用于个人博客、企业主站等。虽然有的主题可以把WordPress变为论坛,但效果并不是很好。
所以,今天给大家推荐一个开源的论坛项目:vanilla,有建站需求的小伙伴可以关注一下!
下面通过图片来直观认识一下它:
论坛主页:
富文本编辑器:
Dashboard:
vanilla的官网就是用vanilla构建的,所以感兴趣的用户可以直接通过访问官网来体验它的强大的功能:
看界面元素确实很符合现代论坛的用户需求吧。
最后,奉上相关地址,感兴趣的小伙伴可以冲了:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>这个工具是开源免费的,由于开源不久,目前才900+的Star,但用下来还是非常不错的,DD觉得这款工具还是非常有潜力的,所以给大家推荐一下。
slashbase有几个比较亮眼的功能,比如:
除了上面的常用特性之外,slashbase还有下面这些特性:
下面一起看看slashbase的UI设计,还是非常清晰简洁的:
不知道slashbase是否入你法眼呢?最后奉上相关链接,感兴趣的小伙伴可以前往体验:
]]>作为一名开发者,有很多场景需要用到内网穿透,比如:我们在接入一些大平台做第三方应用时,在本地开发微信公众号工具的时候需要让微信平台能否访问到本地提供的接口。除此之外,还有很多其他场景,也会用到,比如:把放在家里的NAS或服务器暴露到公网上,这样在外面的时候也可以随时随地的访问。
说到内网传统,TJ君第一个想到的是国内最早的一款知名软件:花生壳。但是今天不是要推荐它,而是要推荐一个更牛的开源项目:frp!该项目目前已经收获了69.9 K Star,在GitHub上获得了极大的认可!
frp目前已经提供了大部分操作系统的支持版本,通过这个链接:https://github.com/fatedier/frp/releases, 就可以下载到适合你使用的安装。
以Windows的包为例,解压后可以获得这些内容:
frps是服务端程序,frpc是客户端程序。ini文件就是对应的配置文件。
内网穿透的玩法有很多,这里列举一个比较常见的例子。
比如:我要暴露一个只有自己能访问到服务器。那么可以这样配置:
配置 frps.ini,并启动服务端 frps
[common] |
在需要暴露到外网的机器上部署 frpc,配置如下:
[common] |
在想要访问内网服务的机器上也部署 frpc,配置如下:
[common] |
把frpc也都启动起来之后,通过 SSH 就可以访问内网机器了
ssh -oPort=6000 test@127.0.0.1 |
除了上面的玩法之外,frp还有很多玩法,比如:
篇幅有限,具体如何配置这里就不多说了,有需要的读者可以直接查看官方文档,均有详细的服务端客户端配置案例。
最后,奉上相关链接:
开源地址:https://github.com/fatedier/frp/
文档地址:https://gofrp.org/docs/
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>今天就给大家推荐一个浏览器扩展程序:Automa。Automa是一个开源的浏览器扩展,它可以基于浏览器来执行一些自动化操作。比如,我们可以用它来自动填写表单、执行重复任务、截取网页截图以及抓取网站数据等操作。
从管理界面来直观的认识一下它:
可以看到Automa提供了一个直观的拖拽界面,帮助用户来定制自己的操作流程。从图中,我们可以看到Automa中包含了所有在浏览器中包含的操作。
在定义完浏览器中的工作流之后,我们还可以通过触发器来设置工作里的执行规则,比如,我们可以让他每天执行、每周执行等自定义的规则:
如果你当下还没啥灵感的话,也可以浏览一下Automa的工作流市场,这里已经有大量的可用工作流供你直接下载使用:
里面还有很多有趣的内容,这里TJ君就不一一列举了,感兴趣的不妨一起来探索一下吧!
最后,奉上相关地址:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>
通过官方首页的介绍,我们可以知道,AFFiNE是一款集写作、绘画、计划管理与一体的软件。对标的是Notion、Miro、Monday这些热门当下热门的笔记软件。
TJ下载了最新版本,体验了一下AFFiNE,下面几个特性可以说眼前一亮,非常好用!
AFFiNE同大部分热门开源软件一样,采用了社区版免费的策略。
AFFiNE对于免费用户来说提供以下支持:
对于个人用户来说,这些功能已经完全够了。而专业版、团队版和企业版主要提供一些团队协作管理所需要的能力,比如:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具。Spring Startup Analyzer通过采集Spring应用启动过程的数据,进而生成一个交互式的分析报告,帮助用户发现Spring应用启动慢的位置。同时,Spring Startup Analyzer还提供了Spring Bean异步初始化的工具,来帮助开发者加快Spring应用的启动时间。
下面一起来看看其提供的强大功能。
我们可以先从该项目中给出HTML样例报告(点击这里查看)来看看它所提供的分析功能。
把报告内容的细节部分都收起来,可以看到如下图所示的内容:
主要有六个部分:
点开之后,还能看到具体每次调用时候的时间开销和一些调用细节:
通过上面的介绍,相信你已经了解该工具的强大之处了。接下来就可以通过下面的方法尝试分析一下自己的应用吧:
第一步:从里面的链接中下载最新的安装包
https://github.com/linyimin0812/spring-startup-analyzer/tags
第二步:解压下载的安装包,记住解压后的路径,下面一步要用
第三步:编辑Spring Boot的启动参数,包括:
-javaagent:$HOME/spring-startup-analyzer/lib/spring-profiler-agent.jar
,这里$HOME
代表以前的解压路径,记得根据上面解压后的路径编辑这个参数-Dspring-startup-analyzer.app.health.check.timeout=30
,其他可配置项如下表,你可以工具自己应用的情况去修改:
第四步:查看该工具的日志,可以通过$HOME/spring-startup-analyzer/logs
路径,这里$HOME
代表以前的解压路径,日志文件的类别为:
另外,该工具还支持自定义扩展,这里DD没试过,就不具体介绍了。感兴趣的童鞋可以根据文档去试试。
这里提到了一个启动加速的优化思路,就是把一些耗时的Bean初始化改成异步就能实现。该项目提供了Bean的异步初始化工具,也非常好用,只需要下面几步就能完成。
第一步:引入依赖
<dependency> |
第二步:配置参数
# 异步化的Bean可能在Spring Bean初始化顺序的末尾,导致异步优化效果不佳,打开配置优先加载异步化的Bean |
第三步:检查Bean是否异步初始化。查看日志$HOME/spring-startup-analyzer/logs/startup.log文件,对于异步执行初始化的方法,会按照以下格式写一条日志:
async-init-bean, beanName: ${beanName}, async init method: ${initMethodName} |
但是,作者在文档中也提到了,异步并不是万能的,你还需要注意以下这几点:
好了,今天的学习就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!
最后,奉上项目地址:https://github.com/linyimin0812/spring-startup-analyzer
]]>
LogicFlow是一款流程图编辑框架,它提供了必要的流程图交互和编辑功能,同时还支持节点自定义和插件拓展。LogicFlow可以用于各种逻辑编排场景,例如流程图、ER图和BPMN流程。它在工作审批配置、机器人逻辑编排和无代码平台流程配置等方面都有广泛应用。
LogicFlow的使用非常简单,只需要两步:
<!--LogicFlow core包css--> |
也可以使用npm引入,只需要:
npm install @logicflow/core |
import LogicFlow from "@logicflow/core"; |
这里不得不提一下,LogicFlow提供了一个工具,可以帮助大家所见即所得的绘图,效果如下:
工具地址:https://codesandbox.io/s/logicflow-example-1-zy3o85?file=/step1/index.js:0-1170
最后,奉上最关键的几个传送门:
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>如果您正在搭建公司的成长培训体系,那么今天的推荐也许可以助你一臂之力!
今天要推荐的开源项目名为:PlayEdu
这是一款适用于搭建内部培训平台的开源系统,旨在为企业/机构打造自己品牌的内部培训平台。
PlayEdu 基于 Java + MySQL 开发,采用前后端分离模式,前台采用 React18 为核心框架,后台采用 SpringBoot3 为核心框架。
该开源项目提供了体验版DEMO,感兴趣的小伙伴可以直接通过下面的链接体验一下该项目的功能:
您也可以直接通过下面的截图了解一二:
如果该项目对您有用,可以直接通过下面的了解更多!
欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!
]]>RestClient
。用一句话来让Spring开发者认识RestClient
的话:像WebClient
一样具备流畅API的RestTemplate
。所以,RestClient
的使命就是淘汰已经有14年历史的RestTemplate
。关于WebClient
和RestTemplate
,之前在几种服务消费方式(RestTemplate、WebClient、Feign)这篇文章中有详细的介绍。如果您有一定的了解,那么对于RestClient
一定可以快速上手。
RestClient
案例下面我们通过几个官方给出的案例一起来快速的认识一下RestClient
。
下面是一个最简单的GET请求,返回一个字符串。从这个例子中,我们可以看到API形式跟WebClient
类似。不像以前用RestTemplate
的时候那么麻烦。
RestClient restClient = RestClient.create(); |
关于GET请求,很多时候我们返回的不仅仅是String,更多的时候是一些实体;同时我们有时候还需要获取HTTP状态码以及头信息。这个时候,我们可以使用toEntity
方法来返回一个更为通用的ResponseEntity
来进行后续操作,比如下面这样:
ResponseEntity<String> result = restClient.get() |
在业务层面,为了更方便的解析业务数据。RestClient
还支持对结果进行对象转换。比如下面的例子,就是把HTTP请求返回的JSON数据转化为Pet
对象。这样就免去了开发者手动从ResponseEntity中获取内容,再进行消息转化的麻烦。
int id = ... |
关于其他请求,也是类似的,比如下面的POST请求:
Pet pet = ... |
默认情况下,RestClient
在接收到4xx和5xx状态码的时候,会抛出一个RestClientException
的子类。对于这个动作,我们可以通过onStatus
方法去重写它,比如下面这样:
String result = restClient.get() |
上面的例子是进一步做了包装,并重新抛出。当然您也可以做一些业务性的其他操作。
直接看下面的例子:
Pet result = restClient.get() |
exchange方法提供了更灵活且完整的请求处理入口。在这里,开发者里获取到request
信息,也可以操作response
信息。所以,如果您有复杂的处理逻辑上一节中的请求方法无法满足你需要的时候,就可以通过这里的exchange
方法来定制复杂的处理逻辑。
相信大家对RestTemplate
一定都不陌生,但实际应用估计已经不是很多了,更多的会使用一些其他的客户端来实现HTTP的调用。如今Spring 6.1将推出的RestClient
将很好的弥补这块不足,同时与WebClient
互相补充。
好了,今天的学习就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!
]]>