2015-10-14 54 views
1

我试图在post请求期间设置响应头文件。虽然一切正常编译,标题没有设置。Scalatra设置响应头文件

这里是我的代码:

post("/get_value"){ 
val jsonString = request.body; 

    response.setHeader("Access-Control-Allow-Origin", "*") 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE") 
    response.setHeader("Access-Control-Max-Age", "3600") 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with, content-type") 

jsonString 
} 

什么是设置这样的报头的有效方法是什么?

谢谢!

回答

2

我不熟悉Scalatra,但你可以注意到ActionResult是一个案例类;

case class ActionResult(status: ResponseStatus, body: Any, headers: Map[String, String]) 

本案例类的第三个参数是Map[String,String],它应该是响应头。

还有;

object Ok { 
    def apply(body: Any = Unit, headers: Map[String, String] = Map.empty, reason: String = "") = ActionResult(responseStatus(200, reason), body, headers) 
} 

返回状态码为200的http响应,您可以像创建它那样;

Ok("response",Map('HeaderKey' -> 'HeaderValue')) 

作为一个结论最终的解决方案可以像;

post("/get_value") { 
    val jsonString = request.body; 
    val headers = Map("Access-Control-Allow-Origin" -> "*", 
        "Access-Control-Allow-Methods" -> "POST, GET, OPTIONS, DELETE", 
        "Access-Control-Max-Age" -> "3600", 
        "Access-Control-Allow-Headers" -> "x-requested-with, content-type") 

    Ok(jsonString,headers) 
}