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」を解決できませんでした
このようにファイルを変更すると、プロパティを読み取ることができますが、当然リストには含まれず、1つのエントリのみが含まれます。
cors:
hosts:
allow: http://foo1, http://foo2, http://foo3
(値を1行として読み取り、","
で分割できることは知っていますが、まだ回避策を取りたくありません)
これも機能しません(これは snakeyamls docs に従って有効であると思いますが)。
cors:
hosts:
allow: !!seq [ "http://foo1", "http://foo2" ]
(!!seq
をスキップし、[
/]
を使用するだけでも失敗です)
私は提案を読みました here これは@ConfigurationProperties
を使用することを含み、例をJavaに転送し、Example1で見るyamlファイルで使用しました:
@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エラーフィールド 'allow'のオブジェクト 'cors.hosts'のフィールドエラー:拒否された値[null];コード[NotNull.cors.hosts.allow、NotNull.allow、NotNull];引数[org.springframework.context.support.DefaultMessageSourceResolvable:コード[cors.hosts.allow、allow]; arg [];デフォルトメッセージ[許可]];
私はCORSホストを構成可能にする他の手段を検索し、これを見つけました Spring Boot issue しかし、これはまだ完了していないため、ソリューションとして使用できません。これはすべて、Spring Boot 1.3 RC1で行われます
簡単です。答えはこの doc と this one にあります
だから、あなたはこのようなyamlを持っています:
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;
これで完了です!
application.ymlでコンマ区切り値を使用します
corsHostsAllow: http://foo1/, http://foo2/, http://foo3/
アクセス用のJavaコード
@Value("${corsHostsAllow}")
String[] corsHostsAllow
私は試して成功しました;)
私は以下のようにプロパティからリストを読み取ることができました-
プロパティ-
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;
}
}
私は同じ問題に出会いましたが、解決し、あなたに私の解決策を与えます
exclude-url: >
/management/logout,
/management/user/login,
/partner/logout,
/partner/user/login
spring boot 2.1.6.RELEASEのバージョンで成功