javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.出错怎么办

本文档展示了在Java Hibernate教程中关于Item3_3_2类的校验代码测试案例,测试目的是验证`auctionEnd`字段是否为未来的日期。测试过程中遇到了一个错误:`HV000028: Unexpected exception during isValid call`,原因是导入了错误的`java.sql.Date`而非所需的`java.util.Date`。修复此错误后,测试应当能正确校验日期字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类代码如下(省去了get set方法):

package com.example.hibernatetutorial.chapter3.chapter3_3.chapter3_3_2;

import com.sun.istack.NotNull;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.Future;
import javax.validation.constraints.Size;
import java.util.Date;

@Entity
public class Item3_3_2 {
    private Long id;

    @NotNull
    @Size(
            min = 2,
            max = 255,
            message = "Name is required, maximum 255 characters"
    )
    protected String name;

    @Future
    protected Date auctionEnd;

    public void setId(Long id) {
        this.id = id;
    }

    @Id
    public Long getId() {
        return id;
    }
}

校验代码如下:

package com.example.hibernatetutorial.chapter3.chapter3_3.chapter3_3_2;


import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.sql.Date;

import static org.assertj.core.api.Assertions.assertThat;

class Item3_3_2Test {

    private static Validator VALIDATOR;

    @BeforeAll
    static void beforeAll() {
        VALIDATOR = Validation.byDefaultProvider()
                .configure()
                .messageInterpolator(new ParameterMessageInterpolator())
                .buildValidatorFactory()
                .getValidator();
    }

    @Test
    void should_not_pass_validation_given_before_date() {
        var item = new Item3_3_2();
        item.setAuctionEnd(Date.valueOf("2022-01-01"));
        var violations = VALIDATOR.validate(item);

        assertThat(violations)
                .satisfiesExactly(
                        violation -> assertThat(violation)
                                .returns("must be a future date", ConstraintViolation::getMessage)
                );
    }
}

测试中我期望对auctionEnd进行校验,结果报错如下

javax.validation.ValidationException: HV000028: Unexpected exception during isValid call

检查下发现是Date导错了包,期望是:

import java.util.Date;

却导入了:

import java.sql.Date;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值