提升Boot.scala
中的代码:
Menu.i("Topic") / "topic" >> If(() => false, "myerror")
来自If
的文件:
/**
* If the test returns True, the page can be accessed, otherwise,
* the result of FailMsg will be sent as a response to the browser.
* If the Loc cannot be accessed, it will not be displayed in menus.
*
* @param test -- the function that tests access to the page
* @param failMsg -- what to return the the browser (e.g., 304, etc.) if
* the page is accessed.
*/
case class If(test: () => Boolean, failMsg: FailMsg) extends AnyLocParam
它说:otherwise, the result of FailMsg will be sent as a response to the browser
。所以我希望它返回一个5xx的http代码,错误消息为myerror
,但不是,它会重定向到索引页/
。
并且卷曲:
➜ ~ curl http://localhost:8080/topic -I
HTTP/1.1 302 Found
Set-Cookie: JSESSIONID=5gqkx8azu8gh1u3avyjds3wl;Path=/
Location: /
Expires: Tue, 16 Jul 2013 05:18:02 GMT
Content-Length: 0
Cache-Control: no-cache, private, no-store
Content-Type: text/plain
Pragma: no-cache
Date: Tue, 16 Jul 2013 05:18:02 GMT
X-Lift-Version: 2.5
Server: Jetty(8.1.7.v20120910)
为什么它会返回302?我的错误消息myerror
在哪里?
答案 0 :(得分:0)
Menu.i("Topic") / "topic" >> If(() => false, RedirectResponse("/"))
答案 1 :(得分:0)
您使用的Lift版本是什么?
在Lift 2.4和Lift 2.5中,FailMsg是() ⇒ LiftResponse
的别名,因此只需提供NotFoundResponse("myerror")
即可。
Menu.i("Topic") / "topic" >> If(() => false, () => net.liftweb.http.NotFoundResponse("myerror"))
答案 2 :(得分:0)
您看到重定向的原因是,从String
到重定向的隐式转换为/(默认情况下)设置了Lift错误通知。
该字符串用作错误通知的值,如果您在页面上包含提升通知,则可以看到该错误通知的值。看起来隐含的称为strToFailMsg
。
Lift Cookbook中的配方通过HTTP标头访问限制简要介绍了这一点。