写在前面在REST接口的实现方案中,后端可以仅仅返回一个code,让前端根据code的内容做自定义的消息提醒。当然,也有直接显示后端返回消息的方案。在后端直接返回消息的方案中,如果要提供多个不同语种国家使用,则需要做国际化消息的实现。
12345400 BAD_REQUEST{ "code": "user.email.token", "message": "The email is token."}
实现的目标:
validation的error code可以按照不同语言响应;
自定义error code可以按照不同语言响应;
指定默认的语言;
...
写在前面使用版本:
123spring-boot: 2.1.6.RELEASEsping: 5.1.8.RELEASEjava: openjdk 11.0.13
自定义参数解析器为了能够实现自定义参数解析器,只需要实现HandlerMethodArgumentResolver并将添加到WebMvcConfigurer#addArgumentResolvers即可。
实现效果下面以添加一个获取请求头的client-type参数为例进行是实现。定义注解@ClientTypeMark以及enumClientType,用于注入header中的值。
12345@Target({Eleme...
通过探索可以学得更多,而不是指令。
We learn best by discovery, not instruction.
– 《程序员的思维修炼 | 开发认知潜能的九堂课》
写在前面最近总想尽快调研完husky的项目,然后尽快确定项目中可以集成的git-hook管理工具。之前已经探究了pre-commit,再看完这个项目,就可以确定方案了。
安装 & 卸载执行环境123456node -v# v16.4.0npm -v# 7.18.1git --version# git version 2.24.3 (Apple Git-128)
安装
安装husky
12npm in...
Unix 哲学
提供”锋利“的小工具、其中每一把都意在把一件事情做好。
–《程序员修炼之道 - 从小工到专家》
写在前面如果你使用Git,那你一定懂得纯文本的魅力并喜爱上shell这样的脚本语言。
在很多时候,我更喜欢能够通过脚本语言进行配置的工具,而不是直接安装到编辑器的工具。一是因为脚本可以放在项目中与更多的人共享,以保持规范一直;二是脚本自动触发的操作无需要记更多的快捷键或者点击一点鼠标;再来则是脚本语言可以做更多灵活的操作,而不受软件开发者的约束。这大概也是我一直喜欢用Git指令,而不是编译器提供给我的Git工具。
本文将继续讲解git hooks,介绍一款能够帮...
提示 21
Use the Power of Command Shells
利用命令shell的力量
–《程序员修炼之道 - 从小工到专家》
写在前面一个git项目只有一个hooks目录,每个阶段hook文件也只有一个,这样会造成开发人员和公司全局hooks的配置冲突。为了实现全局Git Hooks和开发人员自定义Hooks,特写了该简易项目。
全局Hooks和自定义Hooks项目结构12345678910111213141516171819202122232425262728├── Makefile # make 安装指令├── global #保存全局的hooks│ ├─...
提示 61Don’t Use Manual Procedures.不要使用手工流程
–《程序员修炼之道 - 从小工到专家》
前言Tapd提供了Gitlab代码关联的功能,我们可以利用这个功能将代码的提交和Tapd中的需求进行关联。
可以通过如下的commit message将commit与tapd的story/bug/task进行关联。
123456# 关联需求--story=[story id] --user=[username in tapd]# 关联任务--task=[task id] --user=[username in tapd]# 关联缺陷--bug=[bug id]...
做变化的催化剂
Be a Catalyst for Change
你不能强迫人们改变。相反,要向他们展示未来可能会怎么样,并帮助他们参与未来的创造。
– 提示5 《程序员修炼之道 – 从小工到专家》
写在前面前段时间发现Spring的Event超级好用,所以已经逐步在项目中加入了Spring Event的功能。
开发环境:
Java 1.8Spring Boot 2.1.6.RELEASESpring 5.1.8.RELEASE
基本开发Event是Spring中的概念,不是Spring Event所有的。只要添加了spring-context依赖就可以引入了Spring的事件。...
前言难得上一次“精选题解”,那就顺手发一下吧。
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符
数值
I
1
V
5
X
10
L
50
C
100
D
500
M
1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的...
前言Spring Seuciry相关的内容看了实在是太多了,但总觉得还是理解地不够巩固,还是需要靠知识输出做巩固。
过滤器链和认证过程
一个认证过程,其实就是过滤器链上的一个绿色矩形Filter所要执行的过程。
基本的认证过程有三步骤:
Filter拦截请求,生成一个未认证的Authentication,交由AuthenticationManager进行认证;
AuthenticationManager的默认实现ProviderManager会通过AuthenticationProvider对Authentication进行认证,其本身不做认证处理;
如果认证通过,则创建一个认...
写在前面的话在做前后端分离的开发或者前端调用第三方平台的接口时经常会遇到跨域的问题,前端总是希望能够通过各种方法解决跨域的问题。但事实上跨域问题是安全问题。这篇文章将会讲解一些为什么会有跨域问题,并提供一个方便的解决方法。为了阅读的流畅,相关的参考链接均会在文章末尾给出。本文使用的springboot版本为2.1.6.RELEASE,相应的spring版本为5.1.8.RELEASE。
跨域问题的产生跨域问题的产生是因为浏览器的同源策略。同源策略将协议+域名+端口构成的三元作为一个整体,只有三者均相同的情况下才属于一个源。跨域问题也就是不同源之间访问导致的问题。
同源策略限制了从同一个...