r.GET("/v1.0/:pageId/page", (&page.API{}).Get)
r.POST("/v1.0/:labelId/label", (&label.API{}).Post)
这是一个著名的 Gin 问题,这将导致 wildcard route id conflicts with existing children in path
.但是,我正在编写此脚本以返回模拟结果进行测试,因此绝对需要保留此 URL 结构。大多数解决方案只使用 2 个通配符,并处理它指向的函数中的不同部分。但是,由于这是使用不同的 HTTP 方法(GET 和 POST),所以不可能使用这种方法来解决问题。还有其他方法可以保留此 URL 结构吗?
最佳答案
不确定这是否是最好的方法。这可以正常工作:
使用组:
v10Group := r.Group("/v1.0/:id", checkTheId)
{
v10Group.GET("/page", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg":"Now you are trying to visit a page",
"id_page": c.Param("id"),
})
})
v10Group.GET("/label", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg":"Now you are trying to visit a label",
"id_label": c.Param("id"),
})
})
}
还有一个检查id的中间件,保存在gin.Context
.func checkTheId(c *gin.Context) {
id := c.Param("id")
b, err := strconv.Atoi(id) // judge whether it is a number
if err != nil{
c.JSON(400,gin.H{
"msg":"Parameter invalid, Please input a number",
})
c.Abort()
return
}
c.Set("id", b)
}
结果:关于go - 如何绕过 "wildcard route id conflicts with existing children in path"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62714311/