我有一个带有@ConfigurationProperties
的配置类,如下所示。我能够在MyConfig
类中从application.yaml填充systemConfigMap
,如下所示
@ConfigurationProperties(prefix = "my-config")
@ConstructorBinding
@AllArgsConstructor
public class MyConfig {
/**
* A Configuration Map of multiple Systems
*/
private Map<String, SystemConfig> systemConfigMap;
}
作为的主要类别
@EnableConfigurationProperties(MyConfig.class)
public class SpringApp {
public static void main(String[] args) {
SpringApplication.run(SpringApp.class, args);
}
}
问题是生成的bean名称是my-config-a.b.c.config.MyConfig
,我不能在spring integration http inbound gateway
上的payload-expression
中使用它,我想因为它有"-">
如何为生成的beanMyConfig
指定bean名称?
编辑:HTTP网关配置
<int:channel id="myConfigListChannel" />
<int-http:inbound-gateway request-channel="myConfigListChannel"
path="/data"
error-channel="errorChannel"
supported-methods="GET"
payload-expression="@my-config-a.b.c.config.MyConfig.getSystemConfigMap().values()"
/>
我想在请求/data
开始处理流时加载systemConfigMap
值。
当您尝试在SpEL表达式中使用类似my-config-a.b.c.config.MyConfig
的复杂bean id时,需要将其封装到文本中。否则,它理解一个id,直到第一个.
,它被视为方法/属性引用,以便在之前对可能的bean求值。因此,它试图找到一个类似my-config-a
的bean,然后尝试访问其b
属性,在您的情况下,这是完全错误的。
要解决你的问题,你需要这样做:
payload-expression="@'my-config-a.b.c.config.MyConfig'.systemConfigMap.values()"
另一个技巧是将MyConfig
注入到具有真正有意义的bean名称的bean中,并将表达式中的名称用作委托。