关于嵌套对象属性的@NotBlank无效问题的解决思路



  我们在平常开发写接口时对于一些必填的请求参数除了前端那边加上校验外,在后端往往也是需要加上校验的,但不知道你们有没有遇到过在嵌套对象中加入对于某个字段加上了@NotBlank找个注解,但是这个注解只对于null做了校验,对于""(空值)的情况却失效了。举个栗子,比如我想对下图中这个对象中的字段进行校验,具体的图如下所示:

在这里插入图片描述
在这里插入图片描述
  从以上代码来看,大家可以很清晰的知道我想对IndexInfoModel对象中的useType这个字段做校验,但实际的效果就如我刚开始说得那样,这个注解只对于useType为null时做了校验,对于useType为""(空值)的情况却失效了。那么怎么解决呢?经过google,发现还真有一个不错的解决方法,而且非常简单!直接在IndexInfoModel对象上加上 @Valid这个注解就可以了,如下图所示:
在这里插入图片描述
  那么问题来了,为什么加上这个注解就可以了?难道这个注解这么神奇?我们可以看下@Valid的内部构造,具体代码我已经贴出来,如下所示:

/**
 * Marks a property, method parameter or method return type for validation cascading.
 * <p>
 * Constraints defined on the object and its properties are be validated when the
 * property, method parameter or method return type is validated.
 * <p>
 * This behavior is applied recursively.
 *
 * @author Emmanuel Bernard
 * @author Hardy Ferentschik
 */
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface Valid {
}

  从注解的解释中可以清晰地知道它可以标记在属性、方法参数或方法返回类型上进行级联验证,而且第二行中已经很清楚地表达Constraints defined on the object and its properties are be validated when the property, method parameter or method return type is validated.,意思就是在验证属性,方法参数或方法返回类型时,将验证在对象及其属性上定义的约束,最后一行的This behavior is applied recursively.表明此行为是递归应用的,也就是说在IndexInfoModel对象上加上@Valid这个注解后,无论IndexInfoModel对象中嵌套多少层对象,都可以进行验证!
  我觉得有个博客写得还不错,而且写得比较完整,大家可以参考下:
@Validated注解无效,以及嵌套对象属性的@NotBlank无效问题

  以上就是我的对这个问题的综合阐述,如果大家还有什么疑问或者有不同的看法,欢迎大家踊跃提出!谢谢!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melo_FengZhi

您的鼓励对我就是巨大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值