#spring #spring-boot #validation
Вопрос:
Можно ли создать DTO с тегом проверки, который принимает только определенный список значений? Например:
@Getter
@Setter
public class SearchParams {
private String title;
@NotNull
private String type; // type can be only 'approved', 'new' and 'closed'
}
Есть ли какой-то способ использовать теги, чтобы иметь только этот строгий список значений?
Комментарии:
1. Если вы используете перечисление вместо строки?
2. Не могли бы вы показать мне пример кода, пожалуйста?
Ответ №1:
@Getter
@Setter
public class SearchParams {
private String title;
@NotNull
private TypeEnum type;
}
public enum TypeEnum {
APPROVED,
NEW,
CLOSED
}
Вы можете обогатить перечисление описанием, чтобы контролировать чувствительность к регистру
public enum TypeEnum {
APPROVED("approved"),
NEW("new"),
CLOSED("closed");
private String desc;
TypeEnum(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
static TypeEnum fromDesc(String desc) {
TypeEnum[] values = TypeEnum.values();
for (TypeEnum typeEnum: values) {
if (typeEnum.getDesc().equals(desc)) {
return typeEnum;
}
}
return null;
}
}
Таким образом, вы можете получить соответствующее перечисление с помощью строчной строки, как:
TypeEnum.fromDesc("new") // this will return TypeEnum.NEW
Комментарии:
1. это чувствительно к регистру? можно ли добавить сообщение о проверке?
2. Вы можете написать свои собственные валидаторы поверх перечислений, вы можете проверить здесь: baeldung.com/javax-validations-enums