java - 如何在 JPA 中验证 Integer 为 null 或非空白?

标签 java jpa

我有许多要验证的整数,但它被编写为一系列 if 语句,这些语句在 SonarQube 报告中失败。正如您从下面看到的,我想检查(例如) channel 0 是否不为空,以及整数是否不存在于我的存储库中,然后映射到我定义的某些错误消息。我尝试删除下面的 != null 检查,并实现了评分最高的答案中定义的 @NullOrNotBlank 注释,并将其分配给我的字段,但这仅适用于我相信的字符串: Java annotation for Null but neither Empty nor Blank

当我在测试消息中包含非 channel 的任何其他字段时,我会收到 channel 字段的 NullpointerException 错误。

如何更新自定义注释以在验证中包含整数?或者我应该使用更合适的注释?或者也许有更好的方法来编写 if 语句?

示例 - “ channel ”: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 {};
}

最佳答案

您可以创建一个使用存储库(或任何其他 bean)的自定义 validator 。这是一个简单的demo我已经设为 answer类似的问题。

或者(如果可以接受使用第三方依赖项)我会推荐 Jakub Jirutka Bean Validator utilizing Spring Expression Language (SpEL)它允许这样的事情:

public class Sample {

    @SpELAssert("@myService.calculate(#this) > 42")
    private int value;
}

关于java - 如何在 JPA 中验证 Integer 为 null 或非空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711093/

相关文章:

Java - 调用屏幕键盘

java - 两个 EAR 文件,相同的 JPA entitymanager,相同的事务 => 相同的 session ?

java - Spring API 请求在生产环境中比在本地主机上花费更长的时间(相同的数据)

java - ThreadPoolExecutor 中的submit(Callable<T> task) 方法

Java服务器页面: How to get a value into an attribute from code without Expression Language?

java - 在方法返回后运行 Java 代码?

hibernate - 如何使用 JPA CriteriaBuilder 查询执行外连接?

java - JPA CriteriaBuilder 泛型错误 : CriteriaQuery<capture#2-of ? > 不适用于参数 (Expression<Long>)

hibernate - 如何在JPA中进行批量插入?

java - 如何使用 Lambda 和 Streams 查找 Java 中的 2 个单词是否是字谜?