在Spring(Boot)中,我可以使用${...}
语法将注释值外部化为应用程序/环境属性:
@RequestMapping("${some.path.property}")
我还可以将控制器映射到多个路径:
@RequestMapping("/one", "/two")
我如何将两者结合起来?我想在我的属性中定义一个路径列表,或者是逗号分隔的/one, /two
,或者(最好)是我的application.yaml
中的列表:
some.path.property:
- /one
- /two
但是我如何在注释中插入这两种列表呢?
@RequestMapping(???)
编辑:我不知道如何从YAML中读取整个列表(可能是因为它在YAML解析时变成了单独的属性some.path.property[0]
,some.path.property[1]
…吧?)
对于单个CSV属性的简单情况,请说:
some.csv.property: /one, /two
我可以使用属性替换:“${some.csv.property}”
或显式SpEL拆分:“{${some.csv.property}.split('[,]')}”
将其转换为数组,但在这两种情况下,它只适用于@Value
注释。如果我在@RequestMapping
上尝试它,我总是得到一条路径。
Edit2:我可以这样做,其中--
只是一个随机字符串,不是有效路径,但它非常难看:
@RequestMapping(
"${some.path.property[0]:--}",
"${some.path.property[1]:--}",
"${some.path.property[2]:--}",
"${some.path.property[3]:--}",
"${some.path.property[4]:--}",
"${some.path.property[5]:--}",
"${some.path.property[6]:--}",
"${some.path.property[7]:--}",
"${some.path.property[8]:--}",
"${some.path.property[9]:--}"
)
您可以尝试创建HandlerMapping
来添加URL,这里只是一个使用simplerlhandlermapping
@RestController
public class WelcomeController {
public String ping() {
return "pong";
}
}
@SpringBootApplication
@Slf4j
@RestController
public class StackOverflowApplication {
@Autowired
WelcomeController welcomeController;
@Value("${paths}")
List<String> paths;
public static void main(String[] args) {
SpringApplication.run(StackOverflowApplication.class, args);
}
@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();
Map<String, Object> map = new HashMap<>();
final Method getUser = ReflectionUtils.findMethod(WelcomeController.class, "ping");
final HandlerMethod handlerMethod = new HandlerMethod(welcomeController, getUser);
for (String path : paths) {
map.put(path, handlerMethod);
}
simpleUrlHandlerMapping.setUrlMap(map);
simpleUrlHandlerMapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
return simpleUrlHandlerMapping;
}
}
YML文件
paths: ping, ping1, ping2, ping3
这是github中的代码
如果你有一个yaml属性文件(不要重复你的自我原则:)),你可以这样做:
some:
path:
property:
one: /path1
two: /path2
如果您正在使用@Get映射(或@刚需映射),您可以在控制器中这样做:
@GetMapping(value={"${some.path.property.one}", "${some.path.property.two}"})
这是日志
Mapped "{[/path1 || /path2],methods=[GET]}" onto public java.util.List<com.zero.SimpleController> com.zero.SimpleController.hello()
你试过这个吗?:
some:
path:
property: /one, /two
然后呢
@RequestMapping("${some.path.property}")
基于这个答案https://stackoverflow.com/a/41462567/7425783 它应该很好用
下面两个属性有什么区别,什么时候用哪个?
问题内容: 似乎mmap接口仅支持readline()。如果我尝试遍历对象,则会得到字符而不是完整的行。 逐行读取mmap文件的“ pythonic”方法是什么? 问题答案: 遍历an行的最简洁方法是 请注意,在Python 3的前哨参数必须是类型的,而在Python 2它需要一个(即,而不是)。
问题内容: 我有一个非常简单的Spring WebSocket应用程序。但是,我正在尝试使用路径变量进行订阅以及消息映射。 我在下面发布了一个释义的示例。我希望注解会根据订阅者的身份返回给订阅者。即,to 应通知的订阅者,但我没有看到此行为。 值得注意的是,订阅文字作品。这是故意的吗?我是否缺少某些配置?还是这不是它的工作方式? 我对WebSockets或这个Spring项目还不太熟悉,所以在此先
index.html 发送样品
问题内容: 我正在使用SSH2。当我尝试通过设置属性时,这是正确的。但是,当我尝试使用获得相同的属性时,我什么也没有。 为什么?他们不一样吗? 当我使用时,我得到了这些: 似乎在休眠状态下进行会话。为什么? 问题答案: 是的,它们是不同的,在scriptlet中,您使用http会话隐式对象;在struts标签属性中,您引用通过OGNL检索的struts会话映射对象。您一无所获,只是因为它们与众不同
我使用的是。我有一个类似的类。我有一个的。 null