Проверить значения конструктора записиJAVA

Программисты JAVA общаются здесь
Anonymous
Проверить значения конструктора записи

Сообщение Anonymous »

Я играю с современными версиями Java, такими как 17 или 21 вместе с проектом на основе Maven, и мне интересно, есть ли способ получить значения параметров конструктора и просто распечатать их или проверять их и в конечном итоге бросить исключение?

Код: Выделить всё

public record User(
Id id,
Email email,
Password password
) {
public User {
try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) {
Validator validator = factory.getValidator();
Map validationErrorMessages = new HashMap();

String idViolations = validator.validate(id).stream().map(ConstraintViolation::getMessage).toList().toString();
if (!idViolations.equals("[]")) {
validationErrorMessages.put(id.toString(), idViolations);
}

String emailViolations = validator.validate(id).stream().map(ConstraintViolation::getMessage).toList().toString();
if (!emailViolations.equals("[]")) {
validationErrorMessages.put(email.toString(), emailViolations);
}

String passwordViolations = validator.validate(id).stream().map(ConstraintViolation::getMessage).toList().toString();
if (!passwordViolations.equals("[]")) {
validationErrorMessages.put(password.toString(), passwordViolations);
}

if (!validationErrorMessages.isEmpty()) {
throw new ValidationException(validationErrorMessages.toString());
}
}
}
}
< /code>
и значения объектов: < /p>
public record Id(@NotNull Long value) {}

@GroupSequence({Email.class, Additional.class})
public record Email(
@NotNull
@Pattern(regexp = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$",
groups = Additional.class,
message = "Invalid e-mail format")
String value
) {
}

@GroupSequence({Password.class, Additional.class})
public record Password(
@NotNull
@Size(min = 12,
message = "must be at least {min} characters long")
@Pattern(regexp = ".*[a-z].*",
groups = Additional.class,
message = "must contain a small letter")
@Pattern(regexp = ".*[A-Z].*",
groups = Additional.class,
message = "must contain a capital letter")
@Pattern(regexp = ".*\\d.*",
groups = Additional.class,
message = "must contain a digit")
@Pattern(regexp = ".*[#?!].*",
groups = Additional.class,
message = "must contain one of special characters: [#, ?, !]")
String value
) {
}
< /code>
Чего я хочу достичь, это либо аннотировать (возможно, с @aggregate?) Запись пользователя и выполнить проверку под капотом: < /p>
@Aggregate
public record User(
Id id,
Email email,
Password password
) {}
или даже отказаться от аннотации, и каждая запись хранится в конкретном пакете, подтвержденном без кодового дублирования или аннотаций.>

Подробнее здесь: https://stackoverflow.com/questions/792 ... ers-values

Вернуться в «JAVA»