Создайте DTO весеннего поиска с определенным списком

#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