自定义valida验证注解

  • 自定义注解
@Target({ElementType.METHOD,ElementType.FIELD})  //注解作用域
@Retention(RetentionPolicy.RUNTIME)  //注解作用时间
@Constraint(validatedBy = MyConstriantValidator.class) //执行校验逻辑的类
public @interface MyConstraint {

    //校验不过时候的信息
    String message() default "{org.hibernate.validator.constraints.NotBlank.message}";

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

    Class<? extends Payload>[] payload() default {};
}
  • 校验逻辑的执行类
@Slf4j
public class MyConstriantValidator implements ConstraintValidator<MyConstraint,Object> {  //两个泛型分别为自定义注解和要校验的类型
    @Autowired  //可自由注入Spring工厂的bean
    private HelloService helloService;

    /**
     * 初始化
     * @param myConstraint
     */
    @Override
    public void initialize(MyConstraint myConstraint) {
        log.info("my validator init");
    }

    /**
     * 校验逻辑
     * @param o  //校验的参数
     * @param constraintValidatorContext
     * @return
     */
    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        String value = helloService.sayHellp(o.toString());
        log.info(value);
        return false;
    }
}
  • 使用
   @MyConstraint(message = "这是一个测试")
    private String username;
    @PutMapping("/{id:\\d+}")
    public User update(@RequestBody @Valid User user,
                       BindingResult errors){  //这里BindingResult参数必须紧跟被@Valid注解的参数
        if(errors.hasErrors()){
            errors.getAllErrors().stream().forEach(error -> {
              //  FieldError fieldError = (FieldError) error;
              //  String message = fieldError.getField()+" "+error.getDefaultMessage();
                log.info(error.getDefaultMessage());
            });
        }
        return user;
    }
  • 最后附上常用的hibernate valid注解

image.png

image.png

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java 成神之路

从零手写IOC

399100
来自专栏微信公众号:Java团长

自己手写一个SpringMVC框架

前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统。所以学习Spring是Java程序员的必修课。

11620
来自专栏happyJared

Spring Boot中读取配置属性的几种方式

  本文介绍Spring Boot中读取配置属性的几种方式,项目示例中用到的application.yml和application.properties定义如下...

1.6K20
来自专栏JavaEdge

遨游springmvc之HandlerExceptionResolver1.前言2.原理4.总结

53050
来自专栏我叫刘半仙

原 荐 自己手写一个SpringMVC框架(简化)

       Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的...

71960
来自专栏DT乱“码”

读取.properties配置文件工具类

package com.test.utils; import java.io.FileOutputStream; import java.io.IOExce...

24080
来自专栏Java技术栈

从 0 开始手写一个 Spring MVC 框架,向高手进阶!

Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码,你将会失...

30020
来自专栏大神带我来搬砖

Spring boot系列——参数校验

53650
来自专栏小白鼠

SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security

只有特定名称或者类型的Bean(通过@ConditionalOnMissingBean修饰)不存在于BeanFactory中时才创建某个Bean

33330
来自专栏菩提树下的杨过

dubbox 增加google-gprc/protobuf支持

好久没写东西了,今年实在太忙,基本都在搞业务开发,晚上来补一篇,作为今年的收官博客。google-rpc 正式发布以来,受到了不少人的关注,这么知名的rpc框架...

1.4K80

扫码关注云+社区

领取腾讯云代金券