使用Spring和Thymeleaf

时间:2017-03-15 14:18:58

标签: java spring video youtube thymeleaf

当我尝试在具有Spring和Thymeleaf的Java项目中嵌入具有确切时间的YouTube视频时,我遇到了一个问题。

1 /工作方案: 当我尝试嵌入正常的YouTube视频时,它可以工作:
在控制器我有这个: article.setVideo(视频); 视频是youtube视频的结束字符串:

视频链接示例:https://www.youtube.com/embed/s39mNwFuQDQ 此处视频的值为: s39mNwFuQDQ

现在在html Thymeleaf视图中我有: html Thymeleaf view

<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/{url} (url=${article.video})}"   frameborder="0" alt="no video attached" allowfullscreen="1"></iframe>

它需要保存的视频字符串,将其连接到https://www.youtube.com/embed/并且它正常工作。

2 /非工作方案 当我尝试做同样的事情,但是使用具有确切时间的YouTube视频时 - 它无效:

在控制器中我有这个:

article.setVideo(video +“?start =”+ extOptions);

其中:

video - 是一个字符串; extOptions 是一个字符串。

结果我得到了一个String

示例:https://www.youtube.com /embed/s39mNwFuQDQ?start=212 视频是 - s39mNwFuQDQ extOptions 是 - 212

现在在article.getVideo()中我有: s39mNwFuQDQ?start = 212 - 这在数据库中保存得很好。

在Thymeleaf html视图中,我仍然使用相同的代码。 不幸的是,我的视频在浏览器中一直没有显示(试过不同的浏览器)。

当我尝试这样的视频的精确显示时:

<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/s39mNwFuQDQ?start=212}" frameborder="0" alt="no video attached" allowfullscreen="1">

工作正常,视频显示从212秒开始。

这可能是什么问题?

我试过逃跑了吗?标记,一些模式引用(正则表达式转义) - 但这没有帮助,这些只用不需要的字符填充字符串。

任何想法如何解决问题?

1 个答案:

答案 0 :(得分:2)

Thymeleaf正在逃避问号(在这种情况下应该如此)。如果您查看来源,则会看到它正在将?替换为%3F。你应该这样做的方法是将开始保持在一个不同的变量中,并像这样构建url:

th:src="@{https://www.youtube.com/embed/{url} (url=${article.video}, start=${article.start})}"

如果这不是一个选项,您可以将您的网址创建为字符串,但是您可以自行开启某些攻击(如果您可以接收视频网址的不受信任的输入)。

th:src="${'https://www.youtube.com/embed/' + url}"

回答编辑 - 如果控制器选项设置如下:

article.setVideo(video);           // example: video equals: s39mNwFuQDQ
article.setVideoLink(extOptions);  // example: extOptions equals: 212

Thymeleaf的完整语法是:

<!-- Generated url: https://www.youtube.com/embed/s39mNwFuQDQ?start=212 -->
<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/{url}(url=${article.video}, start=${article.videoLink})}" frameborder="1" alt="no video attached" allowfullscreen="0"></iframe>