使用属性占位符表达式

时间:2018-03-11 15:19:53

标签: spring spring-boot spring-web property-placeholder application.properties

在我的春季启动应用程序中,我有以下控制器

@RestController(value = "ProjectController")
@CrossOrigin(origins = {"${app.api.settings.cross-origin.urls}"})
public class ProjectController {
   // some request mapping methods
}

属性app.api.settings.cross-origin.urls已经是 application.properties 文件中包含逗号分隔的有效网址的密钥,例如

app.api.settings.cross-origin.urls=http://localhost:3000, http://localhost:7070

这种方法有效,直到我只有像

这样的单一值

app.api.settings.cross-origin.urls=http://localhost:3000但不包含逗号分隔值。 origins内的@CrossOrigin字段属于String[]类型,但仍未自动转换为String[]。 我的意思是应该有一些方法来实现框架提供的这一点。不是一个解决方法。 我可以使用@Value将属性文件中的逗号分隔网址用作List<String>String[]作为@Configuration类中的字段,如下所示

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Value("${app.api.settings.cross-origin.urls}")
    private String[] consumerUiOrigins;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
         registry
           .addMapping("/api/**")
           .allowedOrigins(consumerUiOrigins);
    }
}

但这将是一个具有广泛适用性的全局配置。我想坚持使用基于CORS配置的更细粒度@CrossOrigin annoation。

所以我在下面清楚地提出了我的问题。

是否可以使用属性plcaholer表达式(String[])将逗号分隔值从属性文件注入${*}到具有相同类型的{{1}的弹簧注释字段中} ?????如果是,那么如何???如果没有那么我们可以调整一些核心框架类来实现这个???任何人请帮助....

P.S。 - 请不要将我的问题标记为Use Spring Properties in Java with CrossOrigin Annotation or in Spring-Config XML

的副本

我的问题更多是关于弹簧注释字段中的属性placholder表达式的使用,这些字段具有多元素类型,如String[],而不是春季应用程序中CORS的配置。

1 个答案:

答案 0 :(得分:0)

尝试在application.properties中执行以下操作:

app.api.settings.cross-origin.urls="http://localhost:3000","http://localhost:7070"