2012-12-31 40 views
5

使用Play 2我正在实现一个简单的REST API,输出是纯文本。我的模板看起来是这样的:删除模板输出中不必要的换行符?

@(items: Map[String,String]) 
@for((key, value) <- items) { 
@value 
@key 
} 

在控制器:

return ok(views.html.bla.render(itemsMap)).as("text/plain"); 

这给出了以下的输出:

(empty line) 
(empty line) 
value 
key 
(empty line) 
value 
key 

我想摆脱第2个空行 - 是那可能吗?

将for放在第一行将删除顶部的空行之一,但仍然存在一行,因为第一行会使模板难以阅读):感谢您的任何提示!

回答

4

首先,如果您使用纯文本,你应该使用TXT模板(bla.scala.txt)。他们还自动设置text/plain; charset=utf-8内容类型。

要修剪的内容,可以直接返回所呈现的内容:

return ok(views.txt.bla.render(itemsMap).body().trim()); 

如果你想渲染HTML内容你需要手动更改此:

return ok(views.html.ble.render().body().trim()).as("text/html; charset=utf-8"); 
+0

完美,解决了这个问题:-) Eclipse在render(itemsMap)之后没有提供任何方法,但.body()。trim()的作用不是那么低:-)非常感谢! –

+0

@Marius修改HTML的body会导致它返回为'text/plain',所以我添加了一个正确返回'text/html'的样本,希望你不介意。 – biesior

+0

其意图是返回'text/plain',但是...... –

1

如果您从地图生成纯文本输出,为什么您使用视图呢?他们不提供任何利益在你的情况下。

您可以在纯Scala中编写渲染函数。喜欢的东西

items.map{ case (k,v) => v + '\n' + k}.mkString('\n') 
+0

出色,我应该切换到XML或某种情况。像这样,生成的格式化内容在我看来仍然更好:-) –

+0

如果切换到XML,则可以使用Scala的XML支持。如果你切换到别的东西 - 比如JSON--你可以使用JSON库。 Play的模板适合(惊喜!)模板。 –