前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >后端字段校验告别 if else,快来用下 @Valid 注解,省事又方便

后端字段校验告别 if else,快来用下 @Valid 注解,省事又方便

作者头像
create17
发布2020-07-03 14:02:28
1.7K0
发布2020-07-03 14:02:28
举报

每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

虽然前端对字段进行了校验约束,但在后端代码中,也很有必要对字段进行约束校验。防止用户直接调用 api 接口进行请求。

一、注解校验参数

1、在 controller 层,首先需要在类上添加 @Validated 注解。

2、方法入参,分为两种情况:一种是单独参数,另一种是对象参数。

  • 单独参数:对于单独参数来说,通常使用 @PathVariable 和 @RequestParam 注解修饰。可以直接在 @PathVariable 和 @RequestParam 注解前添加 @Validated @Length(min = , max = , message = "") 注解进行参数校验。其中 @Validated 可以替换为 @Valid。
  • 对象参数:对于对象参数来说,通常使用 @RequestBody 注解修饰。分为三个步骤:
    • 在 @RequestBody 注解前添加 @Valid,注意,必须是 @Valid 注解,@Validated 注解无效。
    • 在对象实体类中的属性字段上,添加校验注解,比如 @NotEmpty、@Length 等。
    • 在校验对象参数后面紧跟 BindingResult result 参数,@Valid 会将校验的结果存储到 BindingResult 中。如果没有,代码则会报异常。虽然不加 BindingResult 参数也能实现字段校验,但代码总归不是那么优雅。
    • 以上三步缺一不可,只有这样,才能实现字段校验。

二、字段校验常用注解

引入包为:

import javax.validation.constraints.*; import org.hibernate.validator.constraints.Length;

  • @NotNull:字段不能为空。
  • @NotEmpty:验证注解的元素值不为 null 且不为空(字符长度、集合大小、map大小、数组长度不能为零)
  • @NotBlank:验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于 @NotEmpty,@NotBlank 只应用于字符串且在比较时会去除字符串的空格。
  • @Size(max, min):字段元素大小范围。(null也视为有效元素)
  • @Null:字段必须为空。
  • @Min:字段最小值。(不适用doublefloat
  • @Max:字段最大值。(不适用doublefloat
  • @Range:字段范围。(@Min@Max结合)
  • @Length:字段长度范围。
  • @Email:字段必须符合Email格式。
  • @Pattern :正则表达式,不能用在 Integer、Character 类型。例如:@Pattern(regexp = "^[a-zA-Z]\w+$", message = "name命名仅支持数字,字母(大小写)和下划线组合,且必须以字母开头。")
  • @Digits(integer,fraction):限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
  • @Future :限制必须是一个将来的日期
  • @Past :限制必须是一个过去的日期
  • @AssertTrue:推断是否正确。
@Range(min = 0, max = 100, message = "数值1不在正确范围")
private Integer integer1;

@Range(min = 0, max = 100, message = "数值2不在正确范围")
private Integer integer2;

@AssertTrue(message = "integer1 必须小于 integer2")
public boolean isValid() {
    return this.integer1 < this.integer2;
}

三、字段校验失败返回

建议还是通过 @ControllerAdvice 和 @ExceptionHandler 注解写一个统一异常返回类,这样,在统一异常返回类里面,直接再加一个 ValidationException 异常捕获,就可以对字段校验失败的请求进行统一返回,进而提示用户。如下图所示:


好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才

白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

如果本篇博客有任何错误,请批评指教,不胜感激 !

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、注解校验参数
  • 二、字段校验常用注解
  • 三、字段校验失败返回
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档