Symfony Serializer问题 - NotNormalizableValueException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony Serializer问题 - NotNormalizableValueException相关的知识,希望对你有一定的参考价值。

当我在Symfony 4.1中使用带有FOSRestBundle的串行器时,我遇到了一个问题

我有以下错误消息:

无法规范化App Entity Youp类型的对象,找不到支持的规范化程序。 Symfony的分量串行异常 NotNormalizableValueException

我不明白为什么我有这个问题,Symfony的Serializer应该有一个序列化器对象或我错过了什么?

请参阅下面我的控制器和我的实体:

<?php

namespace AppEntity;

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity(repositoryClass="AppRepositoryYoupRepository")
 */
class Youp
{
    /**
     * @ORMId()
     * @ORMGeneratedValue()
     * @ORMColumn(type="integer")
     */
    private $id;

    /**
     * @ORMColumn(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;
    }
}

<?php 

namespace AppController;

use SymfonyComponentHttpFoundationResponse;

use FOSRestBundleControllerFOSRestController;
use FOSRestBundleViewView;
use FOSRestBundleControllerAnnotations as Rest;

use AppEntityYoup;

class BidonController extends FOSRestController {

  /**
   * @RestView()
   * @RestGet("/youps")
   */
  public function getPharmacies() {
    $youps = $this->getDoctrine()->getRepository(Youp::class)->findAll();
    return $youps; 
  }
}
答案

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

services:
  # [..]
  SymfonyComponentSerializerNormalizerObjectNormalizer:
    class: SymfonyComponentSerializerNormalizerObjectNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }

  SymfonyComponentSerializerNormalizerGetSetMethodNormalizer:
    class: SymfonyComponentSerializerNormalizerGetSetMethodNormalizer
    public: false
    tags:
      - { name: 'serializer.normalizer' }

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

以上是关于Symfony Serializer问题 - NotNormalizableValueException的主要内容,如果未能解决你的问题,请参考以下文章

使用 Symfony 2 序列化器对对象中的嵌套结构进行非规范化

带有序列化器的 Symfony JsonResponse

发送用户定义的类给出 InvalidDefinitionException: No serializer found for class... and no properties found

No serializer found for class com.example.entity.TempMsgPerson and no properties discovered to creat

在访问RESTful接口时出现:Could not write content: No serializer found for class 的问题解决小技巧收集

SpringBoot整合Mybatis报错(No serializer found for class com.xxxx and no properties discovered to create)