我希望在Spring中有一个用于下载CSV的动态网址,例如
Bernhard_content_24Feb2017.csv
。更正式地说这将是
{id}_content_{timestamp}.csv
Me_content_1Jan2017.csv
或You_content_31Dec2017.csv
等每个请求都应该转到下面代码中的方法(getCsv(...))。注意,我想保留后缀.csv 。用户应下载名为Me_content_1Jan2017.csv
的文件。
所以我在Spring尝试了这个:
@RequestMapping("{id}_content_{timestamp}.csv")
public void getCsv(@PathVariable String id, @PathVariable String timestamp, HttpServletResponse response) {
response.getWriter().print(createCsv(id));
}
不幸的是,这不起作用。
这个的正确语法是什么?鉴于,它是可能的。
谢谢,
哈德
更新
我选择了这个解决方案(稍微重命名网址,现在就像Me_1Jan2017_content.csv
):
@RequestMapping("{idAndTimestamp}_content.csv")
public void getCsv(@PathVariable String idAndTimestamp, HttpServletResponse response) {
String id = idAndTimestamp.split("_")[0];
response.getWriter().print(createCsv(id));
}
答案 0 :(得分:1)
更改您的ID和时间戳参数。
<script>
$(function() {
$('li').click(function() {
$("li.active").removeClass("active");
$(this).addClass('active');
});
});
</script>
答案 1 :(得分:1)
我无法找到一种方法来为@PathVariable使用复杂的定义。尝试在一个变量中获取完整的文件名,然后在方法中拆分零件。这样的事情。
@RequestMapping("{fileName}")
public void getCsv(HttpServletResponse response, @PathVariable String fileName) {
String[] parts = fileName.split(".")[0].split("_");
String id = parts[0];
String timestamp = parts[2];
}
答案 2 :(得分:0)
你应该尝试这样的事情
jcarousel-skin
}
答案 3 :(得分:0)
尝试这样的事情
@RequestMapping("{filename:.+}") //putting ".+" will keep ".csv" extension otherwise you will lose it.
public void getCsv(@PathVariable(fileName) String fileName) {
String[] parts = fileName.split("_");
String id = parts[0];
String timestamp = parts[2].split(".")[0];
}
如果你想让它更受限制使用:
@RequestMapping("{filename:[A-Za-z0-9]+(_content_)[A-Za-z0-9]+(.csv)}")
希望它有所帮助。