Ограничение проверки Java для enum + подтип - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь улучшить и упростить часть своего кода, используя ограничение Java Validation (@NonNull, @Min и т. Д.), Но в моем коде есть один повторяющийся случай, когда я не могу понять, как его использовать аннотация ограничения.

Вот пример:

public class ResourceIdentifier {
    public enum ResourceType { ARTICLE, USER, COMMENT }

    private @Getter @Setter String id;
    private @Getter @Setter ResourceType type;
}

Тогда я бы хотел проверить объект MyCommand, чтобы resourceId не было нулевым, а resourceId.type могло быть только ARTICLE или COMMENT.

public class MyCommand {
    @NotNull
    @Validate(path="#resourceId.type", values={ResourceIdentifier.ResourceType.ARTICLE, ResourceIdentifier.ResourceType.COMMENT})
    private ResourceIdentifier resourceId;

    (...)
}

Я полагаю, что могу добиться этого с помощью пользовательской аннотации и отражения проверки ограничений.

Есть ли другой простой способ?

РЕДАКТИРОВАТЬ: представьте, что у меня есть 10-20 других командных классов, требующих проверки того же типа resourceId.type = {}

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете просто использовать ограничение утверждения (это метод внутри MyCommand):

@AssertTrue(message="Only Comment and Article are allowed as resource type")
public boolean isResourceIdValid() {
   return this.resourceId.getType() == ResourceIdentifier.ResourceType.ARTICLE 
          || this.resourceId.getType() == ResourceIdentifier.ResourceType.COMMENT;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...