SpringBoot中如何自定义自己的Valid注解

在项目的开发中,在后台接口中,我们经常需要对前端传来的数据进行校验,一般都是使用@Valid注解,但是有的时候我们的校验工作比较复杂,@Valid提供的注解无法满足我们的需求,这个时候我们就需要自己来定义我们自己所需的Valid注解。有同学不清楚@Valid注解的可以看一下我的另一篇文章Spring的数据校验

首先我们来定义一个接口来实现我们的@Valid注解

@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {

	String message() ;

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };
}

其中:@Target —— 表示这个注解可以作用在什么地方,例如作用在方法上,或作用在某个字段上。

           @Retention —— 被它所注解的注解保留多久,runtime表示不仅被保存到class文件中,jvm加载class文件之后,仍然存在

           @Constraint —— 表示我们判断逻辑的具体实现类是什么。

再来定义我们的具体实现类的代码:

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {

	
	@Override
	public void initialize(MyConstraint constraintAnnotation) {
		System.out.println("my validator init");
		
	}

	@Override
	public boolean isValid(Object value, ConstraintValidatorContext context) {
       String name = (String)value;
		if ("tom".equals(name)) {
			return true;
		}
		System.out.println(value);
		return false;
	}

}

其中实现的ConstraintValidator接口中的两个参数,第一个参数就我们定义的接口,第二个参数表示这个注解作用在什么类型的字段上,比如:我们这个定义的注解是只作用在String类型时,可以将Object改成String。

现在就可以将我们自定义的注解作用在我们需要校验的字段上了

public class User {


	
	@MyConstraint(message = "这是一次测试")
	private String username;
	

	private String password;
	

	
    public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}


	
	
	
}

编写我们的Controller进行数据接收

@RestController
@RequestMapping("/user")
public class UserController {
	
	
	
	@PostMapping
	public void create(@Valid @RequestBody User user,BindingResult errors) {
		
		if (errors.hasErrors()) {
			errors.getAllErrors().stream().forEach(error ->     System.out.println(error.getDefaultMessage()));
			
		}
		
	}

当我们传入username为tom时,控制台不打印信息,当username不是tom时,控制台打印出message中的信息,即“这是一次测试”。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot是一个用于创建spring应用程序的框架。通过它,我们可以快速地搭建一个spring应用,并且可以通过简单的配置来完成很多繁琐的工作。在Spring Boot注解被广泛使用,以下是一些常用的注解及其作用: 1. @SpringBootApplication 该注解是Spring Boot应用程序的入口,表示该应用是一个Spring Boot应用,会自动配置spring应用程序并扫描注解、配置等信息。相当于在spring使用@Configuration,@EnableAutoConfiguration和@ComponentScan 3个注解的组合体。 2. @RestController 该注解是一个组合注解,包含@Controller和@ResponseBody注解。使用该注解可以把当前类所有的方法返回数据直接放到HTTP响应体,而不是跳转到某个页面。 3. @Autowired 该注解是自动注入依赖的方式,Spring会根据类型自动装配需要的Bean。 4. @Value 该注解获取配置文件的属性值,我们可以直接把值注入到指定的变量,而不需要通过代码手动解析配置文件的内容。 5. @RequestMapping/@GetMapping/@PostMapping 这些HTTP请求的注解用于绑定REST请求或网页的url路径,并指明请求方法。 6. @RequestBody 该注解将HTTP请求的json或xml数据自动绑定到Java对象。 7. @Valid/@NotNull/@NotEmpty/@NotBlank 这些注解是Java Bean Validation(JSR-303)的注解,用于数据校验,让开发人员可以自定义校验规则,使得数据合法性处理更方便、标准化。 总之,Spring Boot注解让开发人员能够更方便地开发和维护应用程序。使用注解,可以使代码更加简洁和易于阅读,使得开发效率得到大幅提升。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值