Symfony序列化程序问题-NotNormalizableValueException

Symfony序列化程序问题-NotNormalizableValueException,symfony,serialization,fosrestbundle,Symfony,Serialization,Fosrestbundle,在Symfony 4.1中使用带有FOSRestBundle的序列化程序时出现问题 我收到以下错误消息: 无法规范化类型为App\Entity\Youp的对象,找不到支持的规范化程序。 Symfony\Component\Serializer\Exception\NotNormalizableValueException 我不明白为什么会出现这个问题,Symfony的序列化程序应该有一个序列化程序对象,否则我会错过什么 请参见下文“我的控制器和我的实体”: <?php namespace

在Symfony 4.1中使用带有FOSRestBundle的序列化程序时出现问题

我收到以下错误消息:

无法规范化类型为App\Entity\Youp的对象,找不到支持的规范化程序。 Symfony\Component\Serializer\Exception\NotNormalizableValueException

我不明白为什么会出现这个问题,Symfony的序列化程序应该有一个序列化程序对象,否则我会错过什么

请参见下文“我的控制器和我的实体”:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\YoupRepository")
 */
class Youp
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }
}

对象的属性是
私有的
,因此序列化程序不知道如何规范化或从对象获取任何数据。您可以将属性设置为
public
或启用
ObjectNormalizer
(它使用PropertyAccess组件访问私有/受保护的属性)和/或
GetSetMethodNormalizer
(它通过调用“getter”读取类的内容)在配置中使用以下服务定义:

services:
  # [..]
  Symfony\Component\Serializer\Normalizer\ObjectNormalizer:
    class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }

  Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
    class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }

之后清除缓存。有关序列化程序组件中已包含的规范化程序的更多信息,请参见

是的,就是这样!非常感谢。我误解了文件
services:
  # [..]
  Symfony\Component\Serializer\Normalizer\ObjectNormalizer:
    class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }

  Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
    class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }