如何在 API 端点接受可为空的 Long?

How to accept a nullable Long in an API endpoint?

基本上,我有以下用例:我有一个 Entity,需要更新其中一个字段。该字段是 Long,它 可以 null(基本上,当我删除实体时,我需要 null 出该字段)。我们将此字段称为 relativeId.

我的 React 资源如下所示:

updateEntityField(entityId, relativeId) {
  return req({
    method: 'PUT',
    url: `stuff/entities/${entityId}/relative`,
    data: relativeId,
  });
},

我的 Java 资源如下所示:

@ApiOperation("Updates an entity's relative id")
@PUT
@Path("/{id}/relative")
@Consumes(MediaType.APPLICATION_JSON)
public ApiResult<Arrest> updateRelativeId(
  @ApiParam(value = "Entity id", required = true) @PathParam("id") long entityId,
  @ApiParam(value = "relative id", required = true) @Nullable Long relativeId)
    {
        ...
    }

relativeId 总是 null 即使它不是null 在FE 上。我以前从未处理过传递不是具有多个字段的对象的数据,所以我不确定在这里做什么。理想情况下 relativeId 可以只是一个路径参数,但很难通过那里传递空值。而且我想保持资源简单,所以我试图避免故意传递 -1,然后在 BE 中接受时使 null 之类的事情。

您使用 @QueryParam 注释,从请求查询参数中读取此可选值(还建议将 Swagger ApiParam 更新为不需要):

@ApiParam(value = "relative id", required = false) @QueryParam @Nullable Long relativeId)

然后更新 React 代码以将其作为查询参数传递:

updateEntityField(entityId, relativeId) {
    return req({
        method: 'PUT',
        url: `stuff/entities/${entityId}/relative?relativeId=${relativeId}`
    });
},