Подтвердить что ты не робот

Spring Загрузка: список чтения из yaml с помощью @Value или @ConfigurationProperties

Я хочу прочитать список хостов из файла yaml (application.yml), файл выглядит так:

cors:
    hosts:
        allow: 
            - http://foo1/
            - http://foo2/
            - http://foo3/

(пример 1)

Мой используемый класс определяет значение следующим образом:

@Value("${cors.hosts.allow}")   
List<String> allowedHosts;

Но чтение не удается, так как Spring жалуется на это:

java.lang.IllegalArgumentException: не удалось разрешить заполнитель 'cors.hosts.allow' в строковом значении "$ {cors.hosts.allow}"

Когда я изменяю файл следующим образом, свойство может быть прочитано, но, естественно, оно не содержит список, а содержит только одну запись:

cors:
    hosts:
        allow: http://foo1, http://foo2, http://foo3

(я знаю, что могу прочитать значения одной строкой и разделить их на ",", но пока не хочу искать обходной путь)

Это также не работает (хотя я думаю, что это должно быть действительно в соответствии с документами snakeyamls):

cors:
    hosts:
        allow: !!seq [ "http://foo1", "http://foo2" ] 

(Пропуск !!seq и простое использование [/] тоже провал)

Я прочитал предложение здесь, которое включает использование @ConfigurationProperties, перенес пример в Java и использовал его с файлом yaml, который вы видите в Example1:

@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
    @NotNull
    public List<String> allow;
...

Когда я запускаю это, я получаю эту жалобу:

org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult: 1 ошибка Ошибка поля в объекте 'cors.hosts' в поле 'allow': отклонено значение [ноль]; коды [NotNull.cors.hosts.allow, NotNull.allow, NotNull]; аргументы [Org.springframework.context.support.DefaultMessageSourceResolvable: коды [cors.hosts.allow, разрешить]; аргумент тс []; сообщение по умолчанию [Разрешить]];

Я искал другие способы настройки хостов CORS и обнаружил эту проблему с Spring Boot, но так как она еще не закончена, я не могу использовать ее в качестве решения. Все это делается с помощью Spring Boot 1.3 RC1

4b9b3361

Ответ 1

Это просто, ответ есть в этом документе, а также в этом

Итак, у вас есть такой вид:

cors:
    hosts:
        allow: 
            - http://foo1/
            - http://foo2/
            - http://foo3/

Затем вы сначала связываете данные

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix="cors.hosts")
public class AllowedHosts {
    private List<String> HostNames; //You can also bind more type-safe objects
}

Затем в другом компоненте вы просто делаете

@Autowired
private AllowedHosts allowedHosts;

И все готово!

Ответ 2

используйте значения, разделенные запятыми, в application.yml

corsHostsAllow: http://foo1/, http://foo2/, http://foo3/

java-код для доступа

@Value("${corsHostsAllow}")    
String[] corsHostsAllow

Я пробовал и добился успеха;)

Ответ 3

Мне удалось прочитать список из таких свойств, как ниже -

Свойства -

cors.hosts.allow[0]=host-0
cors.hosts.allow[1]=host-1

Считать свойство -

@ConfigurationProperties("cors.hosts")
public class ReadProperties {
    private List<String> allow;

    public List<String> getAllow() {
       return allow;
    }
    public void setAllow(List<String> allow) {
        this.allow = allow;
    }
}

Ответ 4

Я встретил ту же проблему, но решил, дать вам мое решение

exclude-url: >
  /management/logout,
  /management/user/login,
  /partner/logout,
  /partner/user/login

успех в версии Spring boot 2.1.6.RELEASE