gpt4 book ai didi

swift - 使用 vapor 3 在同一条路线上处理不同种类的 json

转载 作者:搜寻专家 更新时间:2023-11-01 06:58:36 25 4
gpt4 key购买 nike

我正在尝试在我的 Vapor 3 服务器上添加一个 POST 端点以创建一个新资源,但我想要有 3 种不同的 JSON 格式来创建该资源。所以我有 3 个不同的 Content 结构,每个都非常相似。

struct IDJson: Content, DeckConvertible {
var name: String?
var format: Int
var hero: Int
var cards: [Int]
}

struct NameJson: Content, DeckConvertible {
var name: String?
var format: Int
var hero: String
var cards: [String]
}

struct DeckstringJson: Content, DeckConvertible {
var name: String?
var deckstring: String
}

我想像这样将它们全部添加到我的路由器

class DeckRouteController: RouteCollection {
func boot(router: Router) throws {
router.post(IDJson.self, at: "user", "collection", use: createDeckHandler)
router.post(NameJson.self, at: "user", "collection", use: createDeckHandler)
router.post(DeckstringJson.self, at: "user", "collection", use: createDeckHandler)
}
}
...

private extension DeckRouteController {
func createDeckHandler(_ request: Request, container: DeckConvertible) throws -> Future<Response> {
// Create deck
}
}

这可能吗?目前只有最后一个被使用但是有没有办法我可以用一些中间件处理程序或其他东西来做到这一点?

最佳答案

您可以在函数本身中处理解码,即:

router.post("user", "collection", use: createDeckHandler)

func createDeckHandler(_ request: Request) throws -> String {
let asId = try? request.content.syncDecode(IDJson.self)
let asName = try? request.content.syncDecode(NameJson.self)
if let asId = asId {
// do stuff
} else if let asName = asName {
// do something else
}
}

关于swift - 使用 vapor 3 在同一条路线上处理不同种类的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com