[英]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 代碼生成部分聲明一個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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.