如何在 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}`
});
},
基本上,我有以下用例:我有一个 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}`
});
},