Значение по умолчанию для свойства конфигурации Micronaut - PullRequest
0 голосов
/ 30 марта 2019

Я не уверен, что это ошибка. Фактически это может быть ожидаемое поведение.

Предположим, у меня есть следующий класс конфигурации

@ConfigurationProperties("app")
public class ApplicationConfiguration {

    public String uri = "/api/v1";

    // I also tested with optional, no difference
    // public Optional<String> uri = Optional.of("/api/v1");
}

и я использую аннотацию @Controller("${app.uri}/some/path") на контроллере.

Если я не добавлю запись в application.yml, я получаю следующую ошибку:

Could not resolve placeholder ${app.uri} in value: ${app.uri}/some/path

Хотя, если я добавлю следующие строки в мой application.yml

app:
  uri: /api/v2

Тогда все работает: заполнитель разрешается в /api/v2, а также значение в вводимом объекте конфигурации устанавливается в /api/v2 вместо значения по умолчанию /api/v1.

Я ожидал бы, что если я не установлю значение в application.yml, значение по умолчанию в классе будет разрешено (/api/v1).

Опять же, это может быть просто задумано, и это нормально. Мне просто интересно, делаю ли я что-то не так и, в этом случае, как исправить.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Это ожидаемое поведение.Невозможно узнать, имеет ли свойство значение по умолчанию в классе конфигурации.Чтобы указать значение по умолчанию в этом контексте, просто выполните:

@Controller("${app.uri:/api/v1}/some/path")

0 голосов
/ 04 апреля 2019

Micronaut очень основан на аннотациях, поэтому вы можете просто включить аннотацию

@Nullable

Вместе с аннотацией @Property для предотвращения ошибки компиляции.

Также в своем классе конфигурации вы делаете что-то вроде:

@ConfigurationProperties("app")
public class ApplicationConfiguration {

    @Nullable
    public String uri = "/api/v1";

    public String getUri() {
         return uril?: "/api/v1"
    }
}
...