Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FOSRestBundle可以';t解析JSON_Json_Symfony_Propel_Fosrestbundle_Symfony 3.2 - Fatal编程技术网

FOSRestBundle可以';t解析JSON

FOSRestBundle可以';t解析JSON,json,symfony,propel,fosrestbundle,symfony-3.2,Json,Symfony,Propel,Fosrestbundle,Symfony 3.2,我对Symfony 3.2中的FOSRestBundle没有什么问题。首先,让我展示配置和操作: FOSRest形态: fos_rest: versioning: true body_converter: enabled: true validate: true validation_errors_argument: validationErrors view: mime_types:

我对Symfony 3.2中的FOSRestBundle没有什么问题。首先,让我展示配置和操作:

FOSRest形态:

fos_rest:
    versioning: true
    body_converter:
        enabled: true
        validate: true
        validation_errors_argument: validationErrors
    view:
        mime_types:
            json: ['application/vnd.service_name+json; charset=UTF-8', 'application/json; charset=UTF-8', 'application/json']
    param_fetcher_listener: true
    body_listener:
        decoders:
            json: fos_rest.decoder.json
    routing_loader:
        default_format: json
    format_listener:
        enabled: true
    serializer:
        serialize_null: true
路由:

api_panel_external_address_services_get:
    path: /addresses/{addressId}/services
    methods: GET
    defaults:
        _controller: AppBundle:Api/ManagementPanel/External/Address:getServices
        _format: json
    requirements:
        addressId: \d+
行动:

 /**
 * @ApiDoc(
 *  section="Panel/External",
 *  resource=true,
 *  description="Get external services",
 *  requirements={
 *    {"name"="addressId", "dataType"="string", "description"="External address id"}
 *  },
 *  statusCodes={
 *      200="Returned when success",
 *      400="Returned when data has errors (did not pass validation)",
 *      404="Returned when address was not found",
 *  }
 * )
 *
 * @ParamConverter("externalAddress", class="Company\Model\ExternalAddress", options={"mapping"={"addressId":"id"}})
 */
public function getServicesAction(ExternalAddress $externalAddress, ConstraintViolationListInterface $validationErrors): Response
{
    if ($validationErrors->count())
    {
        $view = $this->view($validationErrors, Response::HTTP_BAD_REQUEST);

        return $this->handleView($view);
    }

    $externalServices = $externalAddress->getExternalServices();

    $services = [];
    foreach ($externalServices as $externalService)
    {
        $services[] = [
            'id'                  => $externalService->getId(),
            'name'                => $externalService->getName(),
        ];
    }

    return $this->handleView($this->view($services, Response::HTTP_OK));
}
问题: 当我转到route
/api/v1/panel/external/addresses/801/services
时,在不同的环境中会出现不同的错误

邮递员: (代码:400):
无法解码JSON,语法错误-格式错误的JSON。

浏览器:
“code”:415,“message”:“不支持的媒体类型”,“异常”:[{“message”:“反序列化不支持格式\“\”。

但当我删除
,ConstraintViolationListInterface$validationErrors

从行动来看,一切都很好,我得到了JSON响应

我做错了什么吗?我想让这个
$validationErrors
变量在FOSRestBundle文档中

希望我能得到一些帮助

好了,伙计们,我在代码中找到了答案。 这是http方法
GET
,当我没有提供任何内容体(json)时出现错误。当您有
GET
方法时,您应该从操作中删除
$validationErrors
。 在我看来,如果
$method==='GET'
,应该有签入FOSRestBundle。如果没有这一点,它会让人感到困惑,但仍然很有意义-当您的方法是
GET
时,您不需要验证body

希望这将节省一些人的搜索时间

    if ($validationErrors->count())
    {
        $view = $this->view($validationErrors, Response::HTTP_BAD_REQUEST);

        return $this->handleView($view);
    }