beego的路由404问题分析以及解决

zo使用beego分清楚版本,beego的壹版本和v2版本的包发生了变化,使用方式也有新的改变,主要是从beego1.3.0后引入了注解路由的方式,为了简化rounter中的书写方式,如只需要在rounter中通过  beego.NSInclude()的方式把注解的路由hander加入进来,真正的匹配方式交给hander的注解内容去完成,通过URLMapping()优化匹配提高了执行效率。

beego.NSNamespace("/product",
			beego.NSInclude(
				&admin.ProductController{},
			),
		),

type ProductController struct {
	BaseController
}

// URLMapping ...
func (c *ProductController) URLMapping() {
	c.Mapping("AddProduct", c.AddProduct)
	c.Mapping("UpdateProduct", c.UpdateProduct)
	c.Mapping("GetProductParameters", c.GetProductParameters)
	c.Mapping("GetProductAttributes", c.GetProductAttributes)
	c.Mapping("GetProductSpecifications", c.GetProductSpecifications)
	c.Mapping("GetOneProduct", c.GetOneProduct)
	c.Mapping("GetProductCount", c.GetProductCount)
	c.Mapping("GetAllProduct", c.GetAllProduct)
}

// @Title Add Product
// @Description create Product
// @Success 201
// @Failure 500
// @router /add [post]
func (c *ProductController) AddProduct(){}

通过注解路由书写的方式,bee会生成动态路由,访问都是基于生成的路由方式访问,这些生成的本质和自己在rounter书写的一样,后者是生成的简化了开发。注解路由的书写方式如下

adminRoute := beego.NewNamespace("/api/admin",
		// 支持注解路由
	   beego.NSNamespace("/attribute",
			beego.NSInclude(
				&admin.AttributeController{},
			),
		),

	/**
	 * 注册路由
	 */
	beego.AddNamespace(adminRoute)

可以通过命名空间来控制访问路径,使用beego.NSInclude()引入handler的注解路由.如果自己手动方式添加路由就需要删除beego.NSInclude()用beego.NSRouter()代替,handler里的每一个方法都要beego.NSRouter()注册来代替注解的功能。

如果当前使用的bee工具是2.0版本并且使用了注解路由的方式,使用beev2.1.0 generate routers生成了注解路由配置那么可以将当前的rounter删除,而生成的路由文件的使用默认是beego2.0版本导入的依赖是

	beego "github.com/beego/beego/v2/server/web"
	"github.com/beego/beego/v2/server/web/context/param"

我们要想使用beego的版本的注解路由可以将这个包换成指定beego1.0版本

	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context/param"

如果不改会报错,使用的版本冲突问题,所以要手动替换beego2.0默认的包,生成的路由生效后配合之前的路由的访问路径加生成的注解的访问方法规则最终路由到目标方法上,所以原有的rounter的访问路径控制依然有效,用于定位到controller,对于执行哪一个方法则由注解路由生成,这连个配合使用。

生成后的格式和访问路由的方式如下:

	beego.GlobalControllerRouter["go-shop-b2c/controllers/admin:AdminController"] = append(beego.GlobalControllerRouter["go-shop-b2c/controllers/admin:AdminController"],
		beego.ControllerComments{
			Method:           "GetAllAdmin",
			Router:           `/`,
			AllowHTTPMethods: []string{"get"},
			MethodParams:     param.Make(),
			Filters:          nil,
			Params:           nil})
            beego.NSInclude(
                &admin.AdminController{},
            ),

如上在rounter中使用beego.NSInclude定位到了处理器,处理器中注解规定了访问方法的方式,这些方式通过beev2.1.0 generate routers命令获取handler器上注解信息和 URLMapping()方法映射生成最终路由规则,如果生成的路由格则访问路径有问题可以修改生成的路由路径配合原有控制路径发生共同作用。

       总结:使用bee高版本生成的注解路由默认导入的包依赖是v2,需要手动删除高依赖版本的beego加入自己当前版本,还有在路由中导包时自动导入会导入错误的包如github.com/beego/beego实际路由用的包github.com/astaxie/beego而报错。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值