Hibernate Validator 校验 (二)
在Hibernate Validator 校验 (一)中,谈了如何利用 Hibernate Validator 提供的约束注解完成较为简单的对象校验,但这也不能满足开发的需求。这时,我们需要自己实现校验逻辑。
自定义校验逻辑
自实现校验有很多优点,一个项目下,肯定存在多个服务对同一类型的实例操作,而其校验逻辑大多类似。通过自实现校验将该逻辑抽象出来,一方面减少代码重复,又可以满足当下模块开发的思想。
先来看看测试类与 Controller 层实现,其实与上一篇中的实现无太大差别,只是此次我们将使用正则表达式校验username,规则是匹配任何字类字符,包括下划线,因此此处我们模拟发起增添用户的POST请求。
Hibernate Validator 校验(一)
简单校验
Validator 规范对约束的定义包括两部分,一是约束注解, @NotBlank 就是约束注解;二是约束校验器,每一个约束注解都存在对应的约束校验器,约束校验器用来校验具体的对象是否满足该约束注解声明的条件。
声明需要校验的字段
以User实体为例,其中username字段使用注解:@NotBlank,该注解声明username字段不能为空(虽该注解也要求字段不能为null,但与@NotNull有本质区别,后面会列举常见校验注解的区别)。
1 | @Entity |
Spring boot 2.x不再默认将 java.util.Date 序列化为 timestamp(时间戳)
在当下的前后端分离的开发环境下,对于传输时间数据的格式众说纷纭,但我仍然认为传递时间戳timestamp更合理,这样后端程序勿需关注前端时间的表现形式,更能应对一对多(同一后端代码,拥有多个前端)的需求。
在spring boot 1时,被@ResponseBody修饰的返回值中如果存在java.util.Date类型,jackson会默认被序列化为timestamp(一个数字串)的形式。
1 | @RestController |
以上述代码为例,在 spring boot 2后,不再默认序列化,而是格式化为下图格式:

呃,还是太年轻。这里简单谈谈吧。
