Gin框架中GET请求带查询参数返回404,GetUser方法未执行排查
问题原因及解决办法
你遇到404的核心原因是路由定义和请求方式不匹配:
- 你定义的GET路由是
/user/:username,这是路径参数的写法,要求请求路径必须是/user/xxx的形式,xxx会被当作username参数的值。 - 但你实际发送的请求是
localhost:9090/user/?username=abc,这是查询参数的写法,参数放在URL的?后面,和你定义的路由规则不匹配,所以Gin找不到对应的处理方法,返回404。
两种解决方式
方式一:调整请求路径匹配现有路由
把请求地址改成localhost:9090/user/abc,此时abc会被识别为路径参数,context.Param("username")就能正常拿到值,GetUser方法会被执行。
方式二:修改路由支持查询参数
如果想保留/user/?username=abc的请求形式,需要修改路由定义,同时调整参数获取方式:
func main() { router := gin.Default() router.POST("/user", controllers.CreateUser) router.GET("/user", GetUser) // 修改路由路径为/user router.HEAD("/user/:username", controllers.GetUserMeta) router.Run("localhost:9090") } func GetUser(context *gin.Context) { // 使用Query方法获取查询参数 uname := context.Query("username") fmt.Println("received:", uname) // context.IndentedJSON(http.StatusOK, user) }
简单总结:Gin中/:param对应路径参数,?key=value对应查询参数,两者的路由匹配和参数获取方式完全不同,需要根据实际需求选择对应的写法。
内容的提问来源于stack exchange,提问作者Priyanka Salunke
相关产品推荐
相关产品推荐

