IntelliJ IDEA 2020.3.1 版本的 Git 远程地址的链接路径已经修改了。 可以通过左下角的操作按钮来对远程仓库进行操作。 https://www.ossez.com/t/intellij-git-remote/188/2
IntelliJ IDEA 2020.3.1 版本的 Git 远程地址的链接路径已经修改了。 可以通过左下角的操作按钮来对远程仓库进行操作。 https://www.ossez.com/t/intellij-git-remote/188/2
从 Spring Boot 2.4.0 的测试引擎已经使用 Junit 5 的测试了。 因此测试引擎不再需要 exclude junit-vintage 到 Spring Boot 的测试依赖了。 2.4.0 的测试实例应该使用下面的依赖配置: <!-- TESTS --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> 这个问题在 2.3.3 的版本出现了上面的问题,有关这个问题的描述和解决方法,请参考:JUnit 5 测试 Spring 引擎的时候提示 junit-vintage 错误 中的内容。 测试引擎 junit-vintage 主要是版本兼容性的问题。 https://www.ossez.com/t/spring-2-4-0-junit-vintage/13243
微软推出了一项全新的分析服务,它就是能够帮助你深入了解“客户如何使用网站”的 Clarity 。 对网站运营方来说,这项服务有助于找到问题并做出改进。此外,Clarity 允许站方重复推演客户的会话。 访问的网站为:https://clarity.microsoft.com/ 当前已经是 Beta 版的测试了。 Session Replay可能足以激起Web开发人员的好奇心,但微软对Clarity做的计划更有趣,名为“Interesting sessions”,此功能将使用Clarity的AI和机器学习功能来帮助Web开发人员查看异常的点击,滚动行为,会话长度,JavaScript错误等用户会话。通过让Clarity向他们展示最相关的会话,可让开发人员花费更少的时间,更深入地了解他们的用户。 此外,还有相关的会话和热图。前者将基于单个会话对类似会话进行分组,帮助开发人员了解特定用户行为的范围,并为同一用户以及其他用户查找其他事件。后者将通过点击或触摸热图(页面上的用户交互)和滚动热图(用户在页面上滚动的距离)提供聚合级别的用户行为视图。 到目前为止,Clarity听起来是Google Optimize的一个很好的替代品,前提是微软的价格具有竞争力。该公司没有分享时间表,预计Clarity将从测试版发布。在当前状态下,创建新项目后,你将被添加到等待列表中。在获得JavaScript代码,并使用Clarity仪表板重播用户会话之前,你需要获得批准。 链接 如果你配置了微软的 Bing 网站工具的话,在页面的左下角会看到 Clarity 的链接。 单击下面的链接,进行一些简单的设置后就可以进入 Clarity 界面了。 你需要为你的网站安装一些 JS,这个与其他的 JS 的安装是一样的。 界面 进入 Clarity 主页面中,你需要创建一个项目,基本上一个网站可以创建一个项目。 当 Clarity 获得数据后,将会进行分析。 上图显示的是分析的结果,初次使用还是值得一试的。 我们博客的网站数据比较少,如果你网站数据比较多的话,获得分析结果应该会更好。 https://www.ossez.com/t/clarity-beta/13242
随着网站的持续运行,我们可能需要在网站上面添加很多其他网站的标签来进行网站的校验。 一个比较好的方法就是设置 GTM,这样能够让你所有的标签在一个地方设置而不需要在 Discourse 中安装插件等。 GTM 是 Google Tag Manager 的简称。 Discourse 设置 GTM 在 Discourse 的后台中,搜索关键字 : gtm 在空白的地方输入 GTM 的标签变量。这个变量是在你 Google 的 Google Tag Manager 设置的。 访问地址:https://tagmanager.google.com/#/home 找到你定义 Container 名称后,你会在后面看到一个容器 ID。 这个 ID 就是你需要输入的 ID。 输入成功后保存。 修改 content security policy script src 在默认情况下 content security policy script src 是启用的,这个将会导致 Discourse 没有办法执行需要的 Java Script 如果你想严格区分,请将下面的网站添加到信任的网站中: 针对 Google Tag Manager https://tagmanager.google.com/ https://www.googletagmanager.com/ 如果你使用 Google Analytics https://www.google-analytics.com/ ‘unsafe-inline’ 如果你使用 Advertising 特性或者 AdWords 整合,请添加: https://stats.g.doubleclick.net https://www.google.com 同时,为了避免可能有其他的问题,你可以直接添加 https: 需要注意的是:https: 后面有一个冒号的,不要忘记了。 如果你遇到了 ‘unsafe-inline’ 的错误。 那么你还需要把 ‘unsafe-inline’ 添加到信任的链接列表中。 我们的完整配置如下图: 完成上面的设置后,你的 Tag Manger 应该就可以在 Discourse 上使用了。 检查 为了确定配置的正确,在完成上面的配置后,重新访问你的 Discourse 网站,然后刷新页面,同时 F12 查看源代码。 如果你没有看到提示的 JS 错误话,则表明配置已经成功了。 虽然在上面的图片中看到了错误,这个错误有可能是因为 Google 广告载入的时候的错误,这个不属于 JS 错误。 随着不同的类型广告载入,这个错误就不会存在了。 https://www.ossez.com/t/discourse-gtm/13240
在使用 Sprint Boot 提交 x-www-form-urlencoded 的时候,我们首先需要知道 x-www-form-urlencoded 这个是什么东西。 application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。 就是浏览器将会将表单中的内容转换为 URL 的方式提交到后台进行处理。转换的方式其实就是使用 K=V 对的方式。 不同的 K=V 之间是用 & 进行分隔。 例如下面的示例: POST /test HTTP/1.1 Host: foo.example Content-Type: application/x-www-form-urlencoded Content-Length: 27 field1=value1&field2=value2 你可以在你的 API 后面直接加上上面的字符串,然后 POST 请求过去,在上面的字符串和 URL 之间需要添加一个 ? 号。 转换流程是: 假设你有一个表单,在表单中获取的值为: field1=value1 field2=value2 你需要提交的 URL 为 api.example.com/re/request 这样的话。 如果你使用了 application/x-www-form-urlencoded 提交的话,浏览器首先将表单中的数据转换为:field1=value1&field2=value2,请注意中间是使用 & 分隔的。 然后提交到地址:api.example.com/re/request?field1=value1&field2=value2,上面显示的是完整的 URL。 这种提交方式是表单的默认提交方式,同时提交的字符将会进行编码,如果你提交中文字符的话,你可能会看到 %UER,这样的表达,这是因为对中文字符进行了编码而已。 POSTMAN 设置 在使用这种提交之前,你可以在 POSTMAN 设置。 需要在 POSTMAN 中选择提交方式,并且在下面的参数部分设置需要的参数然后单击发送提交即可。 Spring Boot Controller 在 Spring Boot Controller 中需要设置使用 MultiValueMap。 在查看源代码后,你会知道 MultiValueMap 是扩展 Map 的接口,然后用于存储多值的。 一个 Controller 的代码如下: @PostMapping("/soldm") public ResponseEntity<?> searchUsers(@RequestBody MultiValueMap< String, String > values) { logger.debug("K=V Map - {}" , values); REListing reListing= listingService.getREListingById(); return new ResponseEntity<REListing>(reListing, HttpStatus.OK); } 在 RequestBody 设置 MultiValueMap 后,你就可以获得 POST 提交的数据了。 测试运行 测试运行后查看日志: 2021-01-27 10:52:38.782 DEBUG 25176 --- [nio-8080-exec-4] c.o.e.s.controller.RealEstateController : K=V Map - {field1=[value1], field2=[value1]} 从这里,你可以 debug 上传的数据和 MAP 中是否设置了正确的参数。 https://www.ossez.com/t/spring-boot-api-x-www-form-urlencoded/13225
用得好能帮你,用不好处处是陷阱。 能选择信用卡肯定是优先选择信用卡。现在也是信用社会,很多人完全不用信用卡,甚至觉得信用卡就是下山老虎,这种看法有点偏激了,应该是更多的怕自己管不住自己。如果有正确的消费观,信用卡还是能够帮你不少的。 举一个不是非常恰当的比喻和银行的关系用婚姻来说就是好像你和正室的关系,支付宝也好,微信也好就好像你婚姻中一个小三。 小三本来是帮你管管钱,让你花钱方便点,突然有天小三告诉你,你可以从他哪里借钱了,她的钱其实就是你给银行的钱,并且告诉你,你把钱放我这里吧,我这里给你更多的回报。 不要想上不上征信这个漏洞,只要是漏洞肯定都会堵上,早晚而已。说用什么花呗,借呗不上征信这种怎么可能,这个漏洞早就堵上了好吧。 既然这样的话,信用卡肯定是要比花呗好。 1)你可以使用信用卡构建和银行的一种良好的关系,为以后贷款,买房提供一些信用背书。 2)支付宝中的余额,银行查不到,所以没有办法全口径统计的你的资产,所以你在支付宝中的钱,银行是不算数的。 3)信用卡跨境使用方便,弄 VISA 或者其他标的卡,基本上跨境使用没有什么太大问题,支付宝试试看?可能说我又不出国,保不齐哪天你公司组织旅游了,你总要带个信用卡走吧。 4)交易风险及时止付。很多人用支付宝买机票因为支付问题经常钱过去了,机票还没有,航空公司查不到。但是使用信用卡就没有这个问题,航空公司可以用信用卡卡号对查交易,支付微信有清账周期,不是马上查得到的。 5)利率。银行分期等于是你的钱给银行赚了,只要没有逾期,只要交易正常,收入支出比比较平衡,银行方面还是会给你一些优惠的。如果你每次都全额还款,这个无所谓,但是保不齐有一天你有大额支出,没有办法及时还款,你可能需要拖几个月,这个时候你和银行的良好关系的作用就表现出来了。 6)薅羊毛,信用卡会有些积分或者活动,很多信用卡也没有年费。你可以用你的信用卡薅薅羊毛,最开始的时候说不定能够用积分换点卫生纸啥的。 上面说的就是信用卡对比其他支付工具相对的优势,如果你用信用卡绑卡消费,其实没啥区别。
我们知道可以发送 JSON 数据到 API 上面。 通常我们都会使用 POST 方法,在实际编程的时候我们应该如何获得发送的 JSON 数据呢? Controller 获得 JSON 数据 在客户端通过 API 发送 JSON 数据到 Controller 的时候,我们可以在 Controller 使用 RequestBody 注解来获得 JSON 数据。 考察下面的代码: /** * Search Question Index * * @return */ @PostMapping("/sold") public ResponseEntity<?> searchUser(@RequestBody RealEstateRequest realEstateRequest) { logger.debug("realEstateRequest - {}" , realEstateRequest.getPropertyTown()); REListing reListing= listingService.getREListingById(); return new ResponseEntity<REListing>(reListing, HttpStatus.OK); } 在 API 获得 JSON 数据后,将会尝试将 JSON 数据的内容设置到对象 RealEstateRequest 中。 所以,我们还需要在代码中定义一个对象 RealEstateRequest。 RealEstateRequest 对象的代码如下,在下面的代码中,我们省下了上面需要导入的 package 等 public class RealEstateRequest implements Serializable { private static final long serialVersionUID = 6474765081240948885L; private String propertyTown; public String getPropertyTown() { return propertyTown; } public void setPropertyTown(String propertyTown) { this.propertyTown = propertyTown; } } 在这里需要注意的是,为了能够设置正确的值到对象中,你 propertyTown 的这个变量需要和 JSON 对象中的变量相同。 所以你的 JSON 测试数据应该为: { "propertyTown" : "Manchester" } 通过 API 查看对象,你会看到从客户端传递的 JSON 数据已经被设置为正常的数据了。 POSTMAN 从客户端发送的数据如下: JSON 数据字段名 在上面的示例中,我们定义的一个 JSON 字段名为:propertyTown。 如果不做任何设置的话,你的对象是需要使用与这个字段名完全相同的名字才能获得需要的数据的,有时候我们可能不希望这样。我们希望使用不同的名字,例如我们希望设置字段名为:property_town,但是我们还是希望 propertyTown 变量能够获得值。 这个时候你就需要使用:JsonProperty 注解了。 可以在定义的对象中使用 @JsonProperty(“property_town”) 注解。 原因是 RequestBody 使用 jackson 来映射对象的,所以 JsonProperty 这个是 jackson 的注解,主要告诉 jackson 来如何对字段中的数据来进行映射。 在完成上面的修改后,你的 JSON 数据应该是如下的: 然后再对 API 进行测试,你会看到 propertyTown 也能够设置上你传递的参数。 https://www.ossez.com/t/spring-boot-api-controller-json/13217
在我们调试 API 的时候,我们可以向服务器发送 POST 数据。 在 POST 数据的时候,我们可能会使用 JSON 为数据源,但是在发送后,我们得到下面的错误信息: { "timestamp": 1611687768255, "status": 415, "error": "Unsupported Media Type", "message": "", "path": "/re/sold" } 问题和解决办法 出现这个错误的原因是你发送的数据是 JSON 格式没有错,但是 HTTP 不知道你发送的数据是 JSON 格式,这个时候 API 会没有办法识别你的数据的话,会提示上面的错误。 修改办法为在 POSTMAN 的类型中,选择 JSON 格式后重新发送请求。 如果你的 API 配置正常的话,你就可以正确的看到 API 的返回了。 同时也能够看到 API 返回的正确数据。 https://www.ossez.com/t/spring-json-api-unsupported-media-type/13216
.edu 的邮箱不是一点含金量都没有。有时候申请个试用版,学生注册啥的还能半价或者免费。 偶尔发个邮件还能装B 一下,表示自己曾经来过。 学生毕业候注销邮件,这个很正常。学校又不是商业公司,没有必要维护庞大的邮件量,中文姓名重名的多,会占用不少用户名,更多人就是个情怀,真正工作后用学校邮件的不多。很多都是单位邮件+几个私人邮箱。 这个就是学校的选择,其实很多学校都会在学生毕业后几个月注销掉邮箱。 https://www.ossez.com/t/topic/13215
在升级 Spring Boot 从 2.3.3 到 2.4 的时候提示: @EnableResourceServer 将会被丢弃。 @EnableResourceServer 开启资源服务配置,会配置资源服务相关的安全配置。 一个资源服务(可以和授权服务在同一个应用中,当然也可以分离开成为两个不同的应用程序)提供一些受token令牌保护的资源,Spring OAuth提供者是通过Spring Security authentication filter 即验证过滤器来实现的保护,你可以通过 @EnableResourceServer 注解到一个 @Configuration 配置类上,并且必须使用 ResourceServerConfigurer 这个配置对象来进行配置 Convenient annotation for OAuth2 Resource Servers, enabling a Spring Security filter that authenticates requests via an incoming OAuth2 token. 需要在升级的时候注意这个将要丢弃的版本。 https://www.ossez.com/t/spring-boot-2-4-enableresourceserver/13211