2017-09-04 28 views
0

我在Play中编写微服务。我希望我的控制器能够使用特定的JSON响应体生成客户端错误(4xx)。但是,Play的默认HttpErrorHandler已启用,并将我的响应正文替换为HTML文档。针对4xx错误绕过Play的HttpErrorHandler

我怎样才能将我的回应保持原样返回给客户端?

我已经研究过提供一个自定义HttpErrorHandler,但是这不能访问我的控制器生成的响应;签名:

def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result] 

编辑:我再也无法重现此问题。现在,错误处理程序不会启动 - 这是我期望的行为。最有可能的某种形式的用户混淆/错误。

回答

1

客户端错误是由客户端引起的一种情况,并且Play不知道如何处理。这包括格式不正确的标题,不存在的资源(阅读:没有可用于该路径的路由)。

在所有情况下,这不会影响控制器:在路由之前处理它。这也意味着没有可以传递的身体。

如果确实碰到了控制器,您可以自由地返回带有正确响应代码和正文的Result。如果它没有命中控制器,并且调用错误处理程序,则需要根据请求本身返回响应。

你试图达到的一个例子是方便的,因为它对我来说还不是很清楚。

+0

嗨@Igmar,令人尴尬的是,我不再看到我以为我昨天看到的行为,它的行为就像你描述的(这是我想要的)。一定是用户混淆 - 道歉! –