【发布时间】:2019-03-17 04:25:12
【问题描述】:
我的 API 的响应 JSON 有问题。我使用了一个资源,因为我想限制将哪些数据发送回客户端。之前它正确地给出了我想要的响应,但是当我再次打开我的项目时,响应发生了变化。
这是我的部分代码:
api.php
Route::get('admin/adminuserdetails/{adminUser}', 'AdminsController@AdminUserDetails');
示例网址: http://localhost:8000/api/admin/adminuserdetails/1
控制器
public function AdminUserDetails(AdminUsers $adminUser){
return response()->json(new AdminUserAccessDetails($adminUser), 200);
}
AdminUsers 模型
class AdminUsers extends Model
{
//
protected $table = 'AdminUsers';
protected $primaryKey = 'AdminUserId';
protected $guarded = [];
}
AdminUserAccessDetails 资源
class AdminUserAccessDetails extends JsonResource
{
public function toArray($request)
{
//return parent::toArray($request);
return [
'adminUserId' => $this->AdminUserId,
'adminFirstName' => $this->AdminFirstName,
'adminLastName' => $this->AdminLastName,
'modulesAllowed' => $this->ModulesAllowed,
'actionsAllowed' => $this->ActionsAllowed
];
}
}
示例响应(之前是我的预期响应)
{
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"modulesAllowed": "",
"actionsAllowed": ""
}
示例响应(现在)
{
{
"resource": {
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"adminEmail": "asdfsadf@fsafsa.com",
"adminPassword": "l6wfDtAaYAp6aM04TU++9A==",
"authToken": "68bbc9fc7eb08c9f6d96f6b63d30f056",
"fCMToken": null,
"profileImage": "https://www.gravatar.com/avatar/5d0d65256e8c2b15a8d00e8b208565f1?d=identicon&s=512",
"userTypeId": "0",
"status": "A",
"createDate": "2018-06-26 16:01:43.947",
"updateDate": "2018-06-26 16:01:44.143",
"modulesAllowed": "",
"actionsAllowed": ""
},
"with": [],
"additional": []
}
我没有改变任何东西,但是当我再次测试它时(不仅在这个特定的路线中),使用任何资源的所有内容现在都包含在该资源包装中,我似乎无法找到原因。
我尝试用另一个干净的项目实现相同的逻辑,它运行良好。
这是什么原因造成的,我该如何获得预期的回复?
编辑 1: 我试图改变我的回报,我删除了“response()->json()”代码,所以我的控制器看起来像:
public function AdminUserDetails(AdminUsers $adminUser){
//return response()->json(new AdminUserAccessDetails($adminUser), 200);
return new AdminUserAccessDetails($adminUser);
}
此编辑的响应现在更接近我的预期输出:
{
"data": {
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"modulesAllowed": "",
"actionsAllowed": ""
}
}
但是我仍然更喜欢使用 response()->json() 以便我可以返回正确的 HTTP 响应代码..
【问题讨论】: