芒枸公社

懂同学的博客

spring boot 的默认处理

spring boot 未进入到Controller中的错误请求处理:

spring boot 对于数据校验错误的请求处理:

1
2
3
请求: PUT "/user/1"
测试数据:{ "id": 1, "username" : "@jincoco", "password": "123456", "email": "jincoco@email.com", "birthday": 1542700692000 }
校验约束:username 字段必须是数字、字母或_的组合

由于测试错误为字段校验,需要上传数据,此处为PUT请求,尽模拟 APP 发送请求。

阅读全文 »

Hibernate Validator 校验 (一)中,谈了如何利用 Hibernate Validator 提供的约束注解完成较为简单的对象校验,但这也不能满足开发的需求。这时,我们需要自己实现校验逻辑。

自定义校验逻辑

自实现校验有很多优点,一个项目下,肯定存在多个服务对同一类型的实例操作,而其校验逻辑大多类似。通过自实现校验将该逻辑抽象出来,一方面减少代码重复,又可以满足当下模块开发的思想。

先来看看测试类与 Controller 层实现,其实与上一篇中的实现无太大差别,只是此次我们将使用正则表达式校验username,规则是匹配任何字类字符,包括下划线,因此此处我们模拟发起增添用户的POST请求。

阅读全文 »

简单校验

Validator 规范对约束的定义包括两部分,一是约束注解, @NotBlank 就是约束注解;二是约束校验器,每一个约束注解都存在对应的约束校验器,约束校验器用来校验具体的对象是否满足该约束注解声明的条件。

声明需要校验的字段

User实体为例,其中username字段使用注解:@NotBlank,该注解声明username字段不能为空(虽该注解也要求字段不能为null,但与@NotNull有本质区别,后面会列举常见校验注解的区别)。

1
2
3
4
5
6
7
8
@Entity
public class User {

@NotBlank
private String username;

...
}
阅读全文 »

在当下的前后端分离的开发环境下,对于传输时间数据的格式众说纷纭,但我仍然认为传递时间戳timestamp更合理,这样后端程序勿需关注前端时间的表现形式,更能应对一对多(同一后端代码,拥有多个前端)的需求。

spring boot 1时,被@ResponseBody修饰的返回值中如果存在java.util.Date类型,jackson会默认被序列化为timestamp(一个数字串)的形式。

1
2
3
4
5
6
7
8
9
@RestController
public class HelloController {

@GetMapping("/hello")
public Model hello() {
return new Model(1, new Date());
}
}

以上述代码为例,在 spring boot 2后,不再默认序列化,而是格式化为下图格式:

阅读全文 »

一些基础知识

学习堆排序,总要了解的数据结构吧,了解堆又需要了解二叉树的基本知识,了解二叉树要先知道树是个什么东西吧……呃,还是太年轻。这里简单谈谈吧。

二叉树

  1. 提一下——是一对多的数据结构,从一个根结点开始,生长出它的子结点,而每一个子结点又生长出各自的子结点,成为子树。如果某个结点不再生长出子结点了,它就成为叶子一个普通的树结构
阅读全文 »