4

在我的 Spring Boot 应用程序中,我有以下控制器

@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文件中具有逗号分隔的有效 URL 的键,例如

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[]自动转换为。我的意思是应该有一些方法来实现框架提供的这一点。不是解决方法。我可以使用逗号分隔的 url 从属性文件中使用@Value到 aList<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);
    }
}

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

所以我把我的问题清楚地放在下面。

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

PS - 请不要将我的问题标记为在 Java 中使用 CrossOrigin 注释或 Spring-Config XML 中的重复使用 Spring 属性

我的问题更多是关于在 spring 注释字段中使用属性占位符表达式,这些字段具有多元素类型,String[]而不是关于 spring 应用程序中 CORS 的配置。

4

1 回答 1

0

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

app.api.settings.cross-origin.urls="http://localhost:3000","http://localhost:7070"
于 2018-11-14T12:21:34.830 回答