Grails / Groovy:URL参数(最大值,偏移量)空白/字符串时引发NumberFormatException

Dax*_*xon 1 url grails groovy params parseint

在控制器中

 params.max = Math.min(params?.max?.toInteger() ?: 10, 20)
 params.offset = params?.offset?.toInteger() ?: 0
Run Code Online (Sandbox Code Playgroud)

如果您输入以下网址

/books?offset=10&max=              //error
/books?offset=10&max=sdf          //error
/books?offset=&max=10            //works
/books?offset=adsfa&max=10      //error


java.lang.NumberFormatException: For input string: "asdf"

        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

        at java.lang.Integer.parseInt(Integer.java:449)

        at java.lang.Integer.valueOf(Integer.java:554)
Run Code Online (Sandbox Code Playgroud)

是否有一行常规答案来检查url参数中的null / string字符?

ste*_*ase 5

看看Grails 1.2发行说明,其中介绍了用于参数和标记属性的null安全转换器。

你应该换行..

params.max = Math.min(params?.max?.toInteger() ?: 10, 20)
params.offset = params?.offset?.toInteger() ?: 0
Run Code Online (Sandbox Code Playgroud)

..到以下代码:

params.max = Math.min(params.int('max') ?: 10, 20)
params.offset = params.int('offset') ?: 0
Run Code Online (Sandbox Code Playgroud)