为了更好的关注核心的业务逻辑,减少参数校验侵入方法内部,因此有了 JRS-303 提案。
JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。如果想了解更多有关 Hibernate Validator 的信息,请查看 http://www.hibernate.org/subprojects/validator.html
下载 JSR 303 – Bean Validation 规范 http://jcp.org/en/jsr/detail?id=303
目前最新的为 Bean Validation 2.0,是 JSR 380,实现为 Hibernate Validator - 6.0.1.Final
Bean Validation 2.0 中的 constraint
====================================================================================================
| Constraint | 详细信息 |
| — | — |
| @Null | 被注释的元素必须为 null |
| @NotNull | 被注释的元素必须不为 null |
| @AssertTrue | 被注释的元素必须为 true |
| @AssertFalse | 被注释的元素必须为 false |
| @Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @Negative | 被注释的元素必须是一个严格的负数,举例,0 被视为无效值,因为不是负数 |
| @NegativeOrZero | 被注释的元素必须是一个严格的负数或者 0 |
| @Positive | 被注释的元素必须是一个严格的正数,举例,0 被视为无效值,因为不是正数 |
| @PositiveOrZero | 被注释的元素必须是一个严格的正数或者 0 |
| @Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
| @Digits (integer, fraction) | 被注释的元素必须是一个带小数的数,integer 为整数位最大值,fraction 为小数位最大值 |
| @Past | 被注释的元素必须是一个过去的日期 |
| @PastOrPresent | 被注释的元素必须是一个过去的日期或者现在日期 |
| @Future | 被注释的元素必须是一个将来的日期 |
| @FutureOrPresent | 被注释的元素必须是一个将来的日期或者现在日期 |
| @Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
| @NotEmpty | 被注释的元素必须不为 null 或者不为空,可校验字符、集合、Map |
| @NotBlank | 被注释的元素必须不为空字符串 |
| @Email | 被注释的元素必须是电子邮箱地址 |
Hibernate Validator 附加的 constraint
=====================================================================================================
| Constraint | 详细信息 |
| — | — |
| @Length | 被注释的字符串的大小必须在指定的范围内 |
| @Range | 被注释的元素必须在合适的范围内 |
====================================================================================
@Slf4j
@Validated // 使用 spring 的 Validated 注解标注此 Controller 是需要执行校验的,
@RestController
@RequestMapping(“/demo-1”)
public class Demo1Controller {
/**
-
在参数上做校验,基本类型
-
@param name 名称
-
@return
*/
@GetMapping(“/query-1”)
public HttpStatus query1(@NotBlank(message = “不能为空”) String name) {
log.info(“name is {}”, name);
return HttpStatus.OK;
}
}
运行结果:
@Slf4j
@RestController
@RequestMapping(“/demo-2”)
public class Demo2Controller {
@PostMapping(“/save-1”)
public HttpStatus save1(@Validated Person person) {
return HttpStatus.OK;
}
}
@Data
public class Person {
@NotBlank(message = “名字不能为空”)
private String name;
private Integer age;
private String sex;
}
运行结果:
@Slf4j
@RestController
@RequestMapping(“/demo-3”)
public class Demo3Controller {
@Resource
private DemoService service;
@PostMapping(“/save-1”)
public HttpStatus save1(@RequestBody Person person) {
log.info(“person is {}”, person);
service.save(person);
return HttpStatus.OK;
最后
小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。
关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
service.save(person);
return HttpStatus.OK;
最后
小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。
关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。
[外链图片转存中…(img-uumi1q0n-1714738314110)]
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!