Я долгое время использовал @Pattern для проверки ввода текста в своем проекте, и у меня никогда не возникало проблем. Внезапно я получаю следующую ошибку:
jakarta.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'jakarta.validation.constraints.Pattern' validating type 'com.helpmesaythis.hmst3.profile.promo.model.entity.DiscountPromoCode'. Check configuration for 'discountPromoCode'
Есть две странные вещи:
Есть и другие классы, использующие его без проблем, и я уже давно даже не прикасался к этому проблемному классу (он всегда работал).
Я пробовал закомментировать и даже полностью удалить его из класса, но ошибка все равно появляется. Как это вызывает проблему, если ее даже не существует?
import com.helpmesaythis.hmst3.profile.partner.model.entity.Partner;
import jakarta.persistence.*;
import jakarta.validation.constraints.Pattern;
@Entity
@Table(name = "discount_promo_code")
public class DiscountPromoCode {
...
@Size(min = 4, max = 20, message = "Promo Code must be between 4-20 characters")
@Pattern(regexp = "[A-Za-z0-9]+$", message = "Promo Code can contain only letters and numbers")
@Column(name = "promo_code")
private String promoCode;
...
}
Я убедился, что все зависимости обновлены. Моя Spring Boot обновлена.
Опять же: аннотация @Pattern работает везде, но я получаю одно и то же сообщение об ошибке даже после того, как она была удалена из проблемного класса.
Когда включаю spring.jpa.properties.javax.persistence.validation.mode=none все работает как надо.
Есть идеи?
Я поразительно глуп, а вы абсолютно точно нашли ошибку. Я пытался присвоить @Pattern не-String, где поле определено (не в самом классе!). Спасибо.
Неправильное чтение сообщений об ошибках - со мной тоже случается. Рад, что это решено.




Как отметил в комментариях andrewJames, ошибка исходила из поля discountPromoCode, а не из класса DiscountPromoCode. Сама ошибка заключалась в том, что я использовал @Pattern для проверки поля, которое не было строкой.
В сообщении об ошибке упоминается «Проверьте конфигурацию на наличие
discountPromoCode». Где определено это поле? Поле, которое вы показываете нам в вопросе, —promoCode.