使用以下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
> 编译时间以外的其他?我个人仍然找不到任何 checker-framework ,它们可以在运行时进行验证检查。但是,是否可以实现注释处理器来进行运行时检查?
答案 0 :(得分:1)
是的。 Lombok's @NonNull
是运行时检查,仅插入带有引发的if语句:
使用龙目岛
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); } }
香草Java
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(); } }
答案 1 :(得分:0)
您应该从javax.validation.constraints看@NotNull。 我在模型中使用了它,当我尝试使用空@NotNull值保存模型时,它抛出了Constraint异常。
导入为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);
}
}
答案 2 :(得分:0)
误解在你身后:对你的问题没有唯一的答案。
一些注释,当在这样的源代码上使用时,主要是 目标编译时间。就像一些静态分析工具一样,该工具会分析数据流以告诉您您在此处或此处违反了“带注释的”合同。
但是某些注释在运行时也会使用,例如与“ beans”一起使用。此类对象可能作为HTTP请求的参数进入,然后您需要一些框架来检查根据注释指定的规则,例如以JSON接收的内容是否有效。有关某些示例,请参见此tutorial。