在Gin中,是否可以有一条路由使用:item
(名称)或:id
?
示例:
r.GET("/inventories/(:item|:id)", controllers.FindInventory)
然后我可能会做一些像...
func FindInventory(g *gin.Context) {
var inv models.Inventory
if item:
err := models.DB.Where("item = ?", g.Param("item")).First(&inv).Error
else:
err := models.DB.Where("id = ?", g.Param("id")).First(&inv).Error
if err != nil {
g.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
g.JSON(http.StatusOK, gin.H{"data": inv})
}
或者有没有一种方法可以将一个路由用于两种类型的查询?
2条答案
按热度按时间a1o7rhls1#
不,不支持此操作。但一定有办法区分物品和身份证。所以你自己很容易实现这个逻辑。
像这样:
但是如果无法区分,那么就需要有两个单独的请求路径,如
/inventories/by-item/:item
/inventories/by-id/:id
更新于2023-05-31:将@EpicAdidash和@boyvinall的评论合并到答案中。谢谢你!
ubof19bj2#
是的,你可以用params来实现,但是首先,item和id的数据应该是不同的,否则你必须求助于查询来实现