【发布时间】:2018-03-09 09:42:18
【问题描述】:
当我收到一个要反序列化且 ID 为空的实体时,我遇到了很多问题。
我的 JMS Serializer 配置文件是:
jms_serializer:
handlers:
datetime:
default_format: Y-m-d\TH:i:s+
array_collection:
initialize_excluded: false
property_naming:
id: jms_serializer.identical_property_naming_strategy
separator: ''
lower_case: false
enable_cache: true
object_constructors:
doctrine:
fallback_strategy: "fallback"
所以,当实体有一个 id 字段时,它会尝试通过学说从数据库中检索具有该 id 的实体(类似于$repository->find($id))。
如果 Id 存在,则检索填充的实体。如果不存在则返回异常。问题是当我收到一个带有实体要持久化的 JSON 时,id 字段为空,它会尝试在数据库中查找带有ìd==null 的实体,因此会引发异常。
我尝试将fallback_strategy 更改为:“null”、“exception”或“fallback”,但没有成功。
编辑:它发生的控制器
protected function post(Request $request)
{
$content = $request->getContent();
try {
$entity = $this->get('jms_serializer')->deserialize($content, 'App\Entity\Service', 'json');
} catch (\Exception $e){
throw new ValidationException($e);
}
....
}
我放置了一个 try-catch 块来捕获并使用自定义类记录异常。
希望你能帮助我,
谢谢
【问题讨论】:
-
你能在它发生的地方添加控制器吗?当您在控制器中反序列化请求时会发生这种情况吗?
-
@AntoineGalluet 当我在上面写的控制器中反序列化请求时会发生这种情况
标签: php json symfony doctrine-orm jmsserializerbundle