Grails 3 URL映射

Grails 3 URL映射,grails,grails3,grails3.2.0,Grails,Grails3,Grails3.2.0,如何使用两个ID映射Url: /订单/$id1/订单行/$id2 id2是可选的 /订单/$id1/订单行获取->订单id1的所有订单行 /订单/$id1/订单行/$id2 GET->在订单id1中显示订单行id2 这些方法将映射到OrderLineController 使用SpringMVC@RequestMapping和@PathVariable非常简单 Grails3不允许@RequestMapping(有一些技巧可以让它工作——但我不想走这条路——不必要的复杂) 谢谢你的帮助。我在谷歌上

如何使用两个ID映射Url:

/订单/$id1/订单行/$id2

id2是可选的

/订单/$id1/订单行获取->订单id1的所有订单行 /订单/$id1/订单行/$id2 GET->在订单id1中显示订单行id2

这些方法将映射到OrderLineController

使用SpringMVC@RequestMapping和@PathVariable非常简单

Grails3不允许@RequestMapping(有一些技巧可以让它工作——但我不想走这条路——不必要的复杂)


谢谢你的帮助。我在谷歌上搜索了不少

您可以使用URL映射:

UrlMappings.groovy

 class UrlMappings {
        static mappings = {
            "/orders/$id1/orderlines"(controller: 'orderLine', action: 'someAction1')
            "/orders/$id1/orderlines/$id2"(controller: 'orderLine', action: 'someAction2')
        }
    }
OrderLineController.groovy

def someAction1(Long id1){
  //...
}
def someAction2(Long id1, Long id2){
  //...
}
def show() {
  params.id // Order.id
}
def show() {
  params.orderId // Order.id
  params.id      // OrderLine.id
}

使用嵌套URL映射:

UrlMappings.groovy

class UrlMappings {
  static mappings = {
    "/orders"(resources:"order") {
      "/orderLines"(resources:"orderLine")
    }
  }
}
OrderController.groovy

def someAction1(Long id1){
  //...
}
def someAction2(Long id1, Long id2){
  //...
}
def show() {
  params.id // Order.id
}
def show() {
  params.orderId // Order.id
  params.id      // OrderLine.id
}
OrderLineController.groovy

def someAction1(Long id1){
  //...
}
def someAction2(Long id1, Long id2){
  //...
}
def show() {
  params.id // Order.id
}
def show() {
  params.orderId // Order.id
  params.id      // OrderLine.id
}

如@dmahapatro所述,请查看上的文档。

查找“嵌套资源”。非常感谢您提供这一优雅的解决方案。我唯一需要的更改是将这两个方法都放在OrderLineController中。我不需要对OrderController做任何事情,它工作正常。所以我编写了index()方法来处理一个参数(order.id),show()方法处理两个参数。非常感谢。完美的解决方案!