У меня есть класс с несколькими константами:
public class SecurityConstants {
private static final String HAS_ROLE_TEMPLATE = "hasRole('%s')";
public static final String ROLE_USER_INTERNAL = "ROLE_USER_INTERNAL";
public static final String HAS_ROLE_USER_INTERNAL = String.format(HAS_ROLE_TEMPLATE, ROLE_USER_INTERNAL);
}
Если я затем попытаюсь использовать HAS_ROLE_USER_INTERNAL
как @PreAuthorize
значение атрибута аннотации, например этот @PreAuthorize (SecurityConstants.HAS_ROLE_USER_INTERNAL)
компилятор не работает с:
Значение атрибута аннотации PreAuthorize.value должен быть постоянным выражение
Однако, если я изменю HAS_ROLE_USER_INTERNAL
на простую строку
, она будет работать нормально:
public static final String HAS_ROLE_USER_INTERNAL = "hasRole('ROLE_USER_INTERNAL')";
В чем проблема с использованием String.format ()
? Поле имеет значение static
и final
, что может пойти не так?