我有很多可以验证的整数,但是它写为一系列if语句,这些语句在SonarQube报告中失败。从下面可以看到,我想检查(例如)通道0是否不为null,以及是否在我的存储库中不存在整数,然后映射到我定义的一些错误消息。我尝试删除下面的!= null检查,并实现了评分最高的答案中定义的@NullOrNotBlank注释,并将其分配给我的字段,但这仅适用于我相信的String:Java annotation for Null but neither Empty nor Blank
当我在测试消息中包括不是通道的其他任何字段时,我收到该Channel字段的NullpointerException错误。
如何更新自定义批注以在验证中包括整数?还是我应该使用更合适的注释?还是有更好的方式编写if语句?
示例-“渠道”:0,
if (updateCaseDataVO.getChannel() != null
&& !(channelRepository.findById(updateCaseDataVO.getChannel().getChannel()).isPresent())) {
map.put(ErrorConstants.CHANNEL, ErrorConstants.CHANNEL_ERROR_MESSAGE);
}
@ConstraintComposition(CompositionType.OR)
@Null
@NotBlank
@ReportAsSingleViolation
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
public @interface NullOrNotBlank {
String message() default "{org.hibernate.validator.constraints.NullOrNotBlank.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
答案 0 :(得分:0)
您可以创建一个使用存储库(或任何其他bean)的自定义验证器。这是我作为demo作的一个简单answer,用于类似的问题。
或者(如果可以接受使用第三方依赖,则)我建议使用 Jakub Jirutka的 Bean Validator utilizing Spring Expression Language (SpEL),它允许以下操作:
public class Sample {
@SpELAssert("@myService.calculate(#this) > 42")
private int value;
}