能否将RequestMapping的值设为properties文件中定义的字符串数组?
解决@RequestMapping从配置文件读取多路径的问题
你之前的写法无效,是因为直接把逗号分隔的字符串放进数组后,Spring会将整个字符串当成单个请求路径(比如会尝试匹配包含, /value2这类字符的路径),自然匹配不上实际请求。
下面是两种可行的实现方式:
方式一:直接在注解中使用属性占位符
Spring支持在@RequestMapping的value属性中直接使用${}占位符,并且会自动将配置文件中逗号分隔的字符串解析为字符串数组。
- 保持properties配置不变:
request.mapping=/value1/**, /value2, /value3, /value4, /value5
- 修改Controller代码:
@RestController public class YourController { @RequestMapping(value = "${request.mapping}") public ResponseEntity<String> proxyWithBody(@RequestBody String payload, HttpServletRequest request) { return proxy(request, payload); } }
方式二:使用@ConfigurationProperties绑定配置
如果需要更灵活的配置管理,可以用配置类绑定属性,再通过SpEL表达式引用:
- 定义配置类:
@Configuration @ConfigurationProperties(prefix = "request") public class RequestMappingConfig { private String[] mapping; // getter和setter public String[] getMapping() { return mapping; } public void setMapping(String[] mapping) { this.mapping = mapping; } }
- 在Controller中通过SpEL引用配置:
@RestController public class YourController { @RequestMapping(value = "#{@requestMappingConfig.mapping}") public ResponseEntity<String> proxyWithBody(@RequestBody String payload, HttpServletRequest request) { return proxy(request, payload); } }
两种方式都能让Spring正确识别多个请求路径,解决方法不被调用的问题。
内容的提问来源于stack exchange,提问作者ceepan
相关产品推荐
相关产品推荐

