在 Endpoint 中使用 oatpp::Enum 作为路径参数类型的正确方法是什么?

What is the correct way to use oatpp::Enum as a path parameter type in Endpoint?

我正在使用 Oat++ 框架 (https://oatpp.io/) 构建 REST API。 我想管理用户角色,我想有一个端点来更新用户记录的单个字段——用户角色。为此,我创建了一个端点:

ENDPOINT("PUT", "/users/{userId}/role/{role}", updateUserRole,
         PATH(oatpp::String, userId),
         PATH(oatpp::String, role))
{
  // TODO - Set user role here.
  return createResponse(Status::CODE_200, "OK");
}

现在,我想验证用户角色的值是否正确。具体来说,它的值属于允许值的集合。 我可以创建某种具有预定义值的静态集并检查它是否包含接收到的值,但我想知道是否有更好的方法。

我发现 Oatpp 有一些 oatpp::Enum 类型 但我找不到任何在端点中使用枚举作为路径参数的示例。

那么,是否可以使用oatpp::Enum作为路径参数呢?如果是,那么正确的使用方法是什么?

提前致谢!

在 DTO code-gen 部分声明一个 Enum

ENUM(UserRoles, v_int32,
  VALUE(ADMIN, 1, "admin"), //<- you may use qualifiers here
  VALUE(GUEST, 2),
  VALUE(USER, 3)
)

声明一个端点:

ENDPOINT("PUT", "/users/{userId}/role/{role}", updateUserRole,
         PATH(oatpp::String, userId),
         PATH(oatpp::Enum<UserRoles>, role))
{
  // TODO - Set user role here.
  return createResponse(Status::CODE_200, "OK");
}

oatpp::Enum 将为您完成所有验证。

有效请求:

$ curl -X PUT http://localhost:8000/users/user-1/role/GUEST
OK

请求无效:

$ curl -X PUT http://localhost:8000/users/user-1/role/SOMETHING
server=oatpp/1.1.0
code=400
description=Bad Request
message=Invalid PATH parameter 'role'. Expected type is 'oatpp::Enum<UserRoles>'

如果要接收整数值,也可以使用 oatpp::Enum<UserRoles>::AsNumber