我在一个与一个处理所有数据的中央api项目进行对话的项目中拥有这个get Organization方法,
public function searchOrganisations()
{
try {
return $this->client->request(.....);
} catch (Exception $ex) {
}
}
然后在api项目中找到一个方法,如果达到某个时间范围标准,我将抛出一个自定义异常,如下所示:
public function searchOrganisations($searchRequest)
{
$experianCutOff = Carbon::createFromFormat('H:i:s', '06:00:00');
$now = Carbon::now()->setTime(02, 0, 0);
if (!$now->lt($experianCutOff)) {
return $data
} else {
throw new ExperianServiceException();
}
}
我的自定义样本如下:
class ExperianServiceException extends Exception
{
public function render() {
return response()->json([
'message' => 'The Experian Service is currently unavailable, please try again at 0600 GMT'
], 503);
}
}
这可以按预期工作,并且我在列出的第一个方法中捕获了异常,我可以访问状态503并可以看到消息,但是异常的message属性始终以以下格式返回:
Server error: `POST http://docker.../search-organisations` resulted in a `503 Service Unavailable` response:
{"message":"The Experian Service is currently unavailable, please try again at 0600 GMT"}
似乎我提供的自定义消息已与标准Laravel Exception消息(我不想要)连接在一起。如何确保我的消息仅包含自定义异常中提供的内容?
答案 0 :(得分:0)
也许:
return Response::json(array(
'code' => 404,
'message' => $message
), 404);
答案 1 :(得分:0)
您可以使用Exception实现Illuminate\Contracts\Support\Responsable
并定义toResponse
方法来返回该响应。当您仅拥有render
方法时,框架仍会潜在进行准备响应的操作。如果是Responsable
,它将在其上调用toResponse
并直接返回。
这将导致返回toResponse
来自您的Exception的原始响应,而不会通过处理程序的任何其他部分进行准备。