专栏首页Java编程指南SpringBoot@Valid注解的作用

SpringBoot@Valid注解的作用

@Valid

用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。

@RestController
@RequestMapping("/user")
public class UserController {
 @PostMapping
 public User create (@Valid @RequestBody User user) {
 System.out.println(user.getId());
 System.out.println(user.getUsername());
 System.out.println(user.getPassword());
 user.setId("1");
 return user;
 }
} 

然后在 User 类中添加验证信息的要求:

public class User {
 private String id; 
 
 @NotBlank(message = "密码不能为空")
 private String password;
}

@NotBlank 注解所指的 password 字段,表示验证密码不能为空,如果为空的话,上面 Controller 中的 create 方法会将message 中的"密码不能为空"返回。

当然也可以添加其他验证信息的要求:

限制

说明

@Null

限制只能为null

@NotNull

限制必须不为null

@AssertFalse

限制必须为false

@AssertTrue

限制必须为true

@DecimalMax(value)

限制必须为一个不大于指定值的数字

@DecimalMin(value)

限制必须为一个不小于指定值的数字

@Digits(integer,fraction)

限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future

限制必须是一个将来的日期

@Max(value)

限制必须为一个不大于指定值的数字

@Min(value)

限制必须为一个不小于指定值的数字

@Past

限制必须是一个过去的日期

@Pattern(value)

限制必须符合指定的正则表达式

@Size(max,min)

限制字符长度必须在min到max之间

@Past

验证注解的元素值(日期类型)比当前时间早

@NotEmpty

验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

@NotBlank

验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

@Email

验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

除此之外还可以自定义验证信息的要求,例如下面的 @MyConstraint:

public class User {
 
 private String id;
 
 @MyConstraint(message = "这是一个测试")
 private String username;
 
}

注解的具体内容:

@Constraint(validatedBy = {MyConstraintValidator.class})
@Target({ELementtype.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyConstraint {
 String message();
 Class<?>[] groups() default {};
 Class<? extends Payload>[] payload() default {}; 
}

下面是校验器:

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
 @Autowired
 private UserService userService;
 
 @Override
 public void initialie(@MyConstraint constarintAnnotation) {
 System.out.println("my validator init");
 }
 
 @Override
 public boolean isValid(Object value, ConstraintValidatorContext context) {
 userService.getUserByUsername("seina");
 System.out.println("valid");
 return false;
 }
}

本文分享自微信公众号 - Java编程指南(JavaXxzyfx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Macheine Learning Yearning学习笔记(十)

    如果系统是使用复杂的机器学习流水线构建的,此时为了提高系统的性能,通过将错误归因于流水线的特定组件,可以确定工作的优先级,大大提高工作效率。以暹罗猫分类器为例:

    yuquanle
  • 【数据结构】逆转链表

    数据结构与算法课程是我们学校大二才会开始教学的一门课,但是由于我要参加一些比赛需要用到相关结构与算法,只得提早学习相关知识,了解相关内容。今天开始,每当自己...

    程序员周同学
  • Macheine Learning Yearning学习笔记(二)

    Chapter 5、Your development and test sets (您的开发和测试集)

    yuquanle
  • 【leetcode系列】26. 删除排序数组中的重复项

    https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description...

    前端迷
  • 这些问题你都答不上,还好意思说自己学过网络?

    答:三层交换机接收到报文后,会查找硬件转发表,找目的MAC地址,然后根据硬件转发表进行转发。

    网络技术联盟站
  • Macheine Learning Yearning学习笔记(五)

    Chapter 28、Diagnosing bias and variance: Learning curves(诊断偏差和方差:学习曲线)

    yuquanle
  • 杀手级AI补代码工具问世,支持23种语言及5种主流编辑器,程序员沸腾了

    一位来自加拿大的大四学霸,开发了一款”Deep TabNine“代码补全工具,实现了这一大胆的想法。

    用户1737318
  • Paxos算法

    Paxos主要解决在一个可能发生异常的分布式系统中快速明确的在集群内部对某个数据达成一致,并且保证不论系统发生什么异常,都不会破坏整个系统的一致性。

    shysh95
  • Macheine Learning Yearning学习笔记(一)

    Chapter 1、Why Machine Learning Strategy (为什么要学习机器学习策略)

    yuquanle
  • 华为路由交换技术 | OSPF原理与配置

    OSPF:开放式最短路径优先(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。

    网络技术联盟站

扫码关注云+社区

领取腾讯云代金券