symfony API平台在向字符串字段传递null时返回类型错误而不是验证错误

aor9mmx1  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(119)

我使用的是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

错误响应

验证结构示例

xzlaal3s

xzlaal3s1#

多亏了Symfony Slack频道#api-platform的人。
Doctrine列定义在序列化过程中使用,因此要修复该问题,需要nullable=true。一旦添加了这个值,序列化过程就开始工作,并且在验证级别捕获空值,返回预期的响应结构。

odopli94

odopli942#

可以通过在denormalizationContext中设置COLLECT_DENORMALIZATION_ERRORS标志来解决此问题

denormalizationContext: [
    DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS => true
]

这样,您将得到422 ConstraintVoilationsList验证错误响应,而不是400或500

相关问题