Symfony反规范化:递归反规范化不起作用
我正试图将下面的Json结构理想化为Symfony反规范化:递归反规范化不起作用,symfony,denormalization,Symfony,Denormalization,我正试图将下面的Json结构理想化为Profile对象 { "label": "lorem label", "info": { "name": "lorem name", "title": "lorem title" } } 我有一个班级档案 namespace App\Document; class profile { /** * @var string */ protected $label; /
Profile
对象
{
"label": "lorem label",
"info": {
"name": "lorem name",
"title": "lorem title"
}
}
我有一个班级档案
namespace App\Document;
class profile
{
/**
* @var string
*/
protected $label;
/**
* @var Info
*/
protected $info;
// getters and setters
}
和类Info
namespace App\Document;
class Info
{
/**
* @var string
*/
protected name;
/**
* @var string
*/
protected title;
// getters & setters
}
我的控制器代码如下
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use App\Document;
public function addProfile(Request $request, DocumentManager $dm, $profile_id)
{
$phpDocNormalizer = new ObjectNormalizer(null, null, null, new PhpDocExtractor());
$reflectionNormalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor());
$serializer = new Serializer([$phpDocNormalizer, $reflectionNormalizer], [new JsonEncoder()]);
$profile = $serializer->deserialize($request->getContent(), Profile::class, 'json');
return new JsonResponse(Response::HTTP_CREATED);
}
正如上面所说的,我已经设置了phpDocExtractor并开始工作,文档注释也设置好了,PropertyInfo组件也安装好了。但是我一直得到这个NotNormalizableValueException
:
类“App\Document\Profile”的“info”属性的类型必须是“App\Document\info”(“给定数组”)中的一种。
我已经被这个问题困扰了一段时间,非常感谢您的帮助 嗨!我有一段时间没有使用Symfony,但是您是否尝试过反规范化函数?您好,是的,我确实这样做了,就像文档中说的那样,但我仍然得到了同样的异常,即信息应该是一个对象,但数组是给定的,从逻辑上讲,这个异常应该在规范化时抛出,因为反规范化需要一个数组作为输入,但我无法找出我缺少了什么。setter是否也有类型提示(你省略了它们,所以我在问)是的,我确保了这一点,因为我使用的是ReflectionExtractor,setInfo有这个签名setInfo(Info$Info)
,此外我还添加了@var注释。