深入Java泛型(六):Bean强转原理实践(1)

为了更好的关注核心的业务逻辑,减少参数校验侵入方法内部,因此有了 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 | 被注释的元素必须在合适的范围内 |

Spring boot 中使用方式

====================================================================================

参数校验


@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;

}

}

运行结果:

image

POJO 校验


@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;

}

运行结果:

image

接口层级校验


@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)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

service.save(person);

return HttpStatus.OK;

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-uumi1q0n-1714738314110)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值