Spring RequestMapping,带有URL中的时间戳

时间:2017-02-24 13:00:38

标签: java spring spring-mvc

我希望在Spring中有一个用于下载CSV的动态网址,例如 Bernhard_content_24Feb2017.csv。更正式地说这将是

{id}_content_{timestamp}.csv

Me_content_1Jan2017.csvYou_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));
}

4 个答案:

答案 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)}")

希望它有所帮助。