springboot 根据目录结构生成路由前缀

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 根据目录结构生成路由前缀相关的知识,希望对你有一定的参考价值。

参考技术A 需求:制定一个目录为“根目录”,从这个目录开始以下的子目录都加入到路由中

例子:如下目录结构,要访问banner中的list接口,要达到目的 /api/v1/open/banner/list

实现步骤

Rails:手工生成的路由与使用资源创建的路由具有不同的前缀

【中文标题】Rails:手工生成的路由与使用资源创建的路由具有不同的前缀【英文标题】:Rails: routes generated by hand have different prefix from those created with resources 【发布时间】:2016-11-07 11:07:58 【问题描述】:

我想手动创建 rails 路线,而不是使用自动的resource :tasks(这只是一个练习,一旦我理解了这一点,我将回到使用资源:tasks)。

我 /think/ 我有正确的语法,但是当我手动编写路由时生成的前缀 (path_helpers) 是错误的。为什么,我做错了什么?

这是我的代码:

Rails.application.routes.draw do
      root to: 'tasks#index'
      get 'tasks', to: 'tasks#index'
      get 'tasks/:id', to: 'tasks#show'
      get 'tasks/new', to: 'tasks#new'
      post 'tasks', to: 'tasks#create'
      get 'tasks/:id/edit', to: 'tasks#edit'
      patch 'tasks/:id', to: 'tasks#update'
      delete 'tasks/:id', to: 'tasks#destroy'
end

这是我在终端中调用 rails routes 时它创建的路由和前缀:

   Prefix Verb   URI Pattern               Controller#Action
     root GET    /                         tasks#index
    tasks GET    /tasks(.:format)          tasks#index
          GET    /tasks/:id(.:format)      tasks#show
tasks_new GET    /tasks/new(.:format)      tasks#new
          POST   /tasks(.:format)          tasks#create
          GET    /tasks/:id/edit(.:format) tasks#edit
          PATCH  /tasks/:id(.:format)      tasks#update
          DELETE /tasks/:id(.:format)      tasks#destroy

这是我使用resource :tasks时得到的结果

   Prefix Verb   URI Pattern               Controller#Action
    tasks GET    /tasks(.:format)          tasks#index
          POST   /tasks(.:format)          tasks#create
 new_task GET    /tasks/new(.:format)      tasks#new
edit_task GET    /tasks/:id/edit(.:format) tasks#edit
     task GET    /tasks/:id(.:format)      tasks#show
          PATCH  /tasks/:id(.:format)      tasks#update
          PUT    /tasks/:id(.:format)      tasks#update
          DELETE /tasks/:id(.:format)      tasks#destroy

编辑:

回答几个答案:我知道我可以使用“as”来命名前缀,但我认为在这种情况下我不应该这样做。 据我了解,“as”仅在您想将标准前缀更改为个性化前缀的情况下使用,或者如果您认为您的路线将来可能会发生变化并且您不想冒险与您的助手打交道.我仍然应该在不使用“as”的情况下获得正确的前缀。 但是在这里,带有 get 方法的前缀 tasks_new 都链接到 tasks#new 和 tasks#edit 方法,我认为这是不正确的。

【问题讨论】:

作为一个小插件,如果你想在开发过程中跟踪你的路由和前缀,你可以添加这个 gem:rubygems.org/gems/restful_routing 【参考方案1】:

Rails 可让您命名路线。例如:

get 'tasks/new', to: 'tasks#new', as: :new_task

【讨论】:

我知道我可以使用'as'来命名路线,但我认为在这种情况下我不应该这样做。据我了解,“as”仅在您想将标准前缀更改为个性化前缀的情况下使用,或者如果您认为您的路线将来可能会改变并且您不想冒险与您的助手打交道.我仍然应该在不使用“as”的情况下获得正确的前缀。不过在这里,get 方法的前缀 tasks_new 都链接到 tasks#new 和 tasks#edit 方法,我认为这是不对的。 但是你应该使用resources。您期望 rails 解析每个 get 方法,以防它转到控制器中的新方法。如果你有get 'tasks/something', to: 'tasks#new' 应该是new_task_path 还是something_task_path。这会增加 imo 的开销,没有明显的好处 我知道。正如我在问题开始时所说,“这只是一个练习,一旦我理解了这一点,我将回到使用资源:任务”。虽然它可能效率不高,但它应该仍然有效,所以我试图理解为什么它没有。 因为rails不解析get,所以默认是"#controller_name_#controller_action"【参考方案2】:

使用 as 来命名路线。 编写代码如下:

Rails.application.routes.draw do
      root 'tasks#index'
      get 'tasks' => 'tasks#index', as: 'task_list'
      get 'tasks/:id' => 'tasks#show', as: 'display_task'
      get 'tasks/new' => 'tasks#new', as: 'task_new'
      post 'tasks' => 'tasks#create', as: 'task_create
      get 'tasks/:id/edit' => 'tasks#edit', as: 'task_edit'
      patch 'tasks/:id', to: 'tasks#update'
      delete 'tasks/:id', to: 'tasks#destroy'
end

【讨论】:

我知道我可以使用'as'来命名路线,但我认为在这种情况下我不应该这样做。据我了解,“as”仅在您想将标准前缀更改为个性化前缀的情况下使用,或者如果您认为您的路线将来可能会改变并且您不想冒险与您的助手打交道.我仍然应该在不使用“as”的情况下获得正确的前缀。不过在这里,get 方法的前缀 tasks_new 都链接到 tasks#new 和 tasks#edit 方法,我认为这是不对的。

以上是关于springboot 根据目录结构生成路由前缀的主要内容,如果未能解决你的问题,请参考以下文章

初识UmiJS

Nuxt.js学习 --- Nuxt目录结构详解Nuxt常用配置项Nuxt路由配置和参数传递

springboot学习心得

Springboot Mybatis Plus代码自动生成工具类

Springboot Mybatis Plus代码自动生成工具类

Slim (V3) 框架:为生成的链接添加前缀,但不为传入路由添加前缀