如何使 PATCH 字段在响应中是必需的,但在请求正文中是可选的?

发布于 2025-01-12 23:36:05 字数 513 浏览 0 评论 0原文

我有一个实体,其中包括:

/**
 * @ORM\Column(type="float", name="shipping_fees")
 */
#[Groups(["stock:read", "stock:write"])]
#[Assert\PositiveOrZero]
#[Assert\NotNull]
private float $shippingFees = 0.;

以及与该实体关联的 PATCH 请求。生成的 OpenAPI 上下文将 shippingFees 标记为 requestBody 和响应中的 required 属性。 (由于 NotNull 约束)

我希望该字段在请求正文中是可选的,因为这是一个 PATCH 请求。我怎样才能实现它?这是我应该报告的 API 平台故障吗?

I have an entity with, among other fields :

/**
 * @ORM\Column(type="float", name="shipping_fees")
 */
#[Groups(["stock:read", "stock:write"])]
#[Assert\PositiveOrZero]
#[Assert\NotNull]
private float $shippingFees = 0.;

And a PATCH request associated to this entity. The generated OpenAPI context marks shippingFees as a required property both in the requestBody, and in the response. (because of the NotNull constraint)

I expect the field to be optional in the request body, as this is a PATCH request. How can I achieve it ? And is this a malfunction of API Platform which I should report ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨小墨 2025-01-19 23:36:05

仅为 PATCH 方法创建单独的序列化组,例如 stock:patch。然后在 Assert 注释中指定应应用它们的序列化。如下所示,

  #[Groups(["stock:read", "stock:write", "stock:patch"])]
  #[Assert\PositiveOrZero]
  #[Assert\NotBlank(groups: ["stock:read","stock:write"])]
  private float $shippingFees = 0;

因此 Assert\NotBlank 将仅适用于 "stock:read","stock:write" 组。我希望这对你有帮助)

Create a separate serialization group just for the PATCH method, such as stock:patch. Then specify in the Assert annotations the serialization groups in which they should be applied. As shown below

  #[Groups(["stock:read", "stock:write", "stock:patch"])]
  #[Assert\PositiveOrZero]
  #[Assert\NotBlank(groups: ["stock:read","stock:write"])]
  private float $shippingFees = 0;

So Assert\NotBlank will only apply to "stock:read","stock:write" groups. I hope this helps you)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文