Grails 2.3.x:获取URL参数的值

Alb*_*ici 6 parameters url grails

鉴于URL

  http://localhost:9000/Estrategia/book/index?format=excel&extension=xls
Run Code Online (Sandbox Code Playgroud)

我想获取格式值(在这种情况下是excel)

在控制器中:

`println params.format

Grails docs参考

params.format总是空的,任何想法?

Grails 2.3.5

import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional

@Transactional(readOnly = true)
class BookController {

    static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

    def exportService // Export service provided by Export plugin
    def grailsApplication  //inject GrailsApplication

   def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)

    if(!params.max) 
    params.max = 10

    println params?.format
    [ bookInstanceList: Book.list( params ) ]
  }
}
Run Code Online (Sandbox Code Playgroud)

dma*_*tro 5

你是约会优于配置的最幸运的受害者之一.;)

带有键的条目format被添加到params默认url映射所引用的,它表示预期的响应类型(通常,是否xml/json)也将用于内容协商,这意味着,例如,如果您使用:

http://localhost:9000/Estrategia/book/index.xml
//params -- [action:index, format:xml, controller:book]

http://localhost:9000/Estrategia/book/index.json
//params -- [action:index, format:json, controller:book]

http://localhost:9000/Estrategia/book/index.json?format=excel&extension=xls
//params -- [action:index, format:json, extension:xls, controller:book]

http://localhost:9000/Estrategia/book/index?format=excel&extension=xls
//params -- [action:index, format:null, extension:xls, controller:book]
Run Code Online (Sandbox Code Playgroud)

format由您要求的内容类型填充.这也意味着,带有名称的请求参数format将被覆盖并将丢失.

您可以将请求参数重命名为其他内容,format然后它应该在控制器中可用,就像param.blah请求参数一样blah=excel.

要么

修改url映射并删除可选((.$format)?如果不需要):

"/$controller/$action?/$id?(.$format)?"{
     constraints {
         // apply constraints here
     }
}
Run Code Online (Sandbox Code Playgroud)