我正在Play中编写微服务。我希望我的控制器能够使用特定的JSON响应主体生成客户端错误(4xx)。但是,Play的默认HttpErrorHandler
会启动,并用HTML文档替换我的响应正文。
如何才能将我的回复更改回客户端?
我已着手提供自定义HttpErrorHandler
,但这并不能访问我的控制器生成的响应;签名是:
def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result]
编辑:我无法再重现此问题。现在,错误处理程序没有启动 - 这是我期望的行为。很可能是某种形式的用户混淆/错误。
答案 0 :(得分:1)
客户端错误是由客户端引起的条件,Play不知道如何处理。这包括格式错误的标头,不存在的资源(读取:该路径没有可用的路由)。
在所有情况下,这都不会触及控制器:它在路由之前处理。这也意味着没有可以传递的身体。
如果确实击中了控制器,您可以使用正确的响应代码和正文返回结果。如果它没有命中控制器,并且调用了错误处理程序,则需要根据请求本身返回响应。
你想要实现的目标的一个例子会很方便,因为这对我来说还不太清楚。