如何在JPA中将Integer验证为null还是非空白?

时间:2019-11-05 12:11:09

标签: java jpa

我有很多可以验证的整数,但是它写为一系列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 {};
}

1 个答案:

答案 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;
}