【问题标题】:How to get Play! Framework to serve a XML response如何获得玩!提供 XML 响应的框架
【发布时间】:2018-06-01 00:41:59
【问题描述】:

不知何故,我无法弄清楚如何获得 Play!提供 XML 响应。而且我也不懂文档(您可以找到here)。

我的目标是创建一个站点地图,所以回复应该是Content-Type: application/xml;

您将如何更改以下控制器以提供该 Content-Type?

public static Result sitemap() {
    return ok("<message \"status\"=\"OK\">Hello Paul</message>");
}

【问题讨论】:

  • 您是否尝试将@BodyParser.Of(Xml.class) 注释添加到您的sitemap-方法中?
  • 是的,它仍然提供“文本/纯文本”:/
  • 有不同的方法...正如 tehlexx 提到的,使用@BodyParser 注释(使用response().setContentType("application/xml") 设置正确的mime 类型)或更简单:使用模板,就像使用HTML 页面一样。这可能是生成一些 XML 响应的最快方法。
  • 哇,太棒了。这行得通。谢谢!但是 @BodyParser 注释不是必需的, response().setContentType("application/xml") 可以完成这项工作。非常感谢。你为什么不把你的评论作为答案?所以我可以将其标记为正确。

标签: xml playframework playframework-2.0


【解决方案1】:

如果您以正确的方式将ok() 标题传递给ok() 方法,Play 将正确设置它。例如,如果您返回String(如您在问题中所示),它认为这是text/plain。您至少有两种方式,最快(但丑陋)是强制内容类型,Jürgen 建议将其设置为响应,但事实上 Play 有一个快捷方式:

public static Result sitemap() {
    return ok("<message status=\"OK\">Hello Paul</message>").as("text/xml");
}

另一方面,使用 XML 模板可能比使用 glued 字符串构建它更好、更简洁……只需创建 XML 文件:

/app/views/sitemap.scala.xml:

<message status="OK">John Doe</message>

所以你可以像这样简单地使用它:

public static Result index() {
    return ok(views.xml.sitemap.render());
}

当然这个文件是Play常用的模板,所以你可以将数据传递给它并在里面处理(即迭代项目列表等)

【讨论】:

  • 内容类型是用xml模板自动设置的吗?不确定,因为 json 不是这种情况。
  • 是的,它是自动设置的,如果您使用 ie 也是如此。 JsonNode like: return ok(Json.toJson(someObj)); 它将被设置为 application/json 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多