代码之家  ›  专栏  ›  技术社区  ›  Rui

是否可以在运行时而不是编译时进行验证检查?

  •  0
  • Rui  · 技术社区  · 6 年前

    使用以下Java代码:

    public class Bean{
      private String value;
      public Bean(@NonNull String value) {
        //Usually fail-fast validation can be added here if it is needed
        this.value = value;
      }
      public String getValue() {return this.value;}
    
    }
    

    是否可以检查构造函数 论点 value 通过 注释 @NonNull 运行时间 除了 编译时 ? 就我个人而言,我还是没有找到 ,它可以在 运行时间 . 但是,是否可以实现 注释处理器

    3 回复  |  直到 6 年前
        1
  •  1
  •   Michael    6 年前

    对。 Lombok's @NonNull 是一个运行时检查,它只插入带有throw的if语句:

    与龙目

    import lombok.NonNull;
    
    public class NonNullExample extends Something {
      private String name;
    
      public NonNullExample(@NonNull Person person) {
        super("Hello");
        this.name = person.getName();
      }
    }
    

    import lombok.NonNull;
    
    public class NonNullExample extends Something {
      private String name;
    
      public NonNullExample(@NonNull Person person) {
        super("Hello");
        if (person == null) {
          throw new NullPointerException("person is marked @NonNull but is null");
        }
        this.name = person.getName();
      }
    }
    
        2
  •  0
  •   Tristan MARIE    6 年前

    您应该看看javax.validation.constraints中的@NotNull。 我在模型中使用它,当我试图用null@NotNull值保存模型时,它抛出一个约束异常。

    进口是 import javax.validation.constraints.NotNull;

    如果您使用的是Spring和mongodb,那么您必须对其进行配置,使其正常工作,我在Internet上的某个地方找到了一段代码(不记得在哪里),您可以使用它:

    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener;
    import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
    
    @Configuration
    public class CustomRepositoryRestConfigurerAdapter {
        @Bean
        public LocalValidatorFactoryBean localValidatorFactoryBean() {
            return new LocalValidatorFactoryBean();
        }
    
        @Bean
        public ValidatingMongoEventListener validatingMongoEventListener(
                @Qualifier("localValidatorFactoryBean") LocalValidatorFactoryBean lfb
        ) {
            return new ValidatingMongoEventListener(lfb);
        }
    }
    
        3
  •  0
  •   GhostCat    6 年前

    一些注释,当用于像这样的源代码时 主要地

    但有些注释也“意味着”要在运行时使用,例如与“bean”一起使用。这些对象可能作为HTTP请求的参数传入,然后根据通过注释指定的规则,您可以让一些框架检查以JSON为例接收的内容是否实际有效。看这个 tutorial 举几个例子。