如何绕过 "wildcard route id conflicts with existing children in path" 错误?
How to bypass the "wildcard route id conflicts with existing children in path" error?
r.GET("/v1.0/:pageId/page", (&page.API{}).Get)
r.POST("/v1.0/:labelId/label", (&label.API{}).Post)
这是杜松子酒的一个著名问题,这将导致wildcard route id conflicts with existing children in path
。但是,我正在编写此脚本以返回用于测试的模拟结果,因此绝对需要保留此 URL 结构。大多数解决方案只使用 2 个通配符来处理它指向的函数中的不同部分。但是,由于这是使用不同的 HTTP 方法(GET 和 POST),所以不可能使用那种方式来解决问题。有没有其他方法可以保留此 URL 结构?
不确定是不是最好的way.This能不能正常工作:
使用群组:
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)
}
结果:
r.GET("/v1.0/:pageId/page", (&page.API{}).Get)
r.POST("/v1.0/:labelId/label", (&label.API{}).Post)
这是杜松子酒的一个著名问题,这将导致wildcard route id conflicts with existing children in path
。但是,我正在编写此脚本以返回用于测试的模拟结果,因此绝对需要保留此 URL 结构。大多数解决方案只使用 2 个通配符来处理它指向的函数中的不同部分。但是,由于这是使用不同的 HTTP 方法(GET 和 POST),所以不可能使用那种方式来解决问题。有没有其他方法可以保留此 URL 结构?
不确定是不是最好的way.This能不能正常工作:
使用群组:
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)
}
结果: