我使用的是API Platform v2.2.5,在为我的资源编写测试的过程中,我发现,当为string
类型的字段提供null
时,在反规范化过程中会返回一个错误响应,其中包括一个非客户端友好的消息和一个堆栈跟踪。这与提供空字符串或完全省略字段的情况不同,后者返回结构化验证响应。我怎么能返回一个验证错误响应,就像提供一个空字符串一样?
实体
class MyEntity
{
/**
* @var string|null
*
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank
*
* @Groups({"read", "write"})
*/
private $title;
/**
* @return null|string
*/
public function getTitle(): ?string
{
return $this->title;
}
/**
* @param string $title
* @return WorkoutTemplate
*/
public function setTitle(?string $title): self
{
$this->title = $title;
return $this;
}
}
资源配置
App\Entity\MyEntity:
collectionOperations
post:
denormalization_context:
groups:
- write
错误响应
验证结构示例
2条答案
按热度按时间xzlaal3s1#
多亏了Symfony Slack频道#api-platform的人。
Doctrine列定义在序列化过程中使用,因此要修复该问题,需要
nullable=true
。一旦添加了这个值,序列化过程就开始工作,并且在验证级别捕获空值,返回预期的响应结构。odopli942#
可以通过在
denormalizationContext
中设置COLLECT_DENORMALIZATION_ERRORS
标志来解决此问题这样,您将得到422
ConstraintVoilationsList
验证错误响应,而不是400或500