参数校验
使用 Java规范校验 303号,JSR303。
SpringBoot 还用 if 校验参数?老司机都是这么玩的!
校验入参原来这么简单,不要再手写代码校验了_如何对入参对象中某一个字段进行校验-CSDN博客
日期出入格式化。
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-
第一步,在需要进行校验的参数前加上 @Valid注解。一般加在 Controller 的入参中。
@Null | 被注释的元素必须为 null |
---|---|
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(min=1,max=10) | 被注释的元素的集合个数必须在指定的范围内,比如用在 List 上 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotBlank | 被注释的字符串的必须非空 |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 |
@URL(protocol=,<br>host=, port=, <br>regexp=, flags=) | 被注释的字符串必须是一个有效的url |
@CreditCardNumber | 被注释的字符串必须通过Luhn校验算法,<br>银行卡,信用卡等号码一般都用Luhn<br>计算合法性 |
@ScriptAssert<br>(lang=, script=, alias=) | 要有Java Scripting API 即JSR 223<br>("Scripting for the JavaTM Platform")的实现 |
@SafeHtml(whitelistType=,additionalTags=) | classpath中要有jsoup包 |
分组校验
一个 Request 中,如果有的加了分组,有的没加,没加分组的校验不生效。
// 定义两个 interface,AddGroup、UpdateGroup // Request 的部分代码 @Null(groups = {AddGroup.class}, message = "新增时id必须为空!") @Null(groups = {UpdateGroup.class}, message = "修改时id不可为空!") private Long id; @NotBlank(groups = {AddGroup.class, UpdateGroup.class}, message = "名称不可为空!") // Controller 部分代码 @ApiOperation("新增或修改") @PostMapping() public ApiResult<Boolean> save(@RequestBody @Validated({AddGroup.class}) SaveBrandRequest request) { return ApiResult.ok(brandService.save(request)); }
使用 BindingResult 获取校验结果
@ApiOperation("新增或修改") @PostMapping() public ApiResult<Boolean> saveOrUpdate(@RequestBody @Valid SaveCategoryRequest request, BindingResult bindingResult) { if (bindingResult.hasErrors()) { bindingResult.getFieldErrors().forEach((item) -> { item.getField(); item.getDefaultMessage(); }) ApiResult.fail(); } return ApiResult.ok(categoryService.saveOrUpdate(request)); }