当前位置: 首页 > 面试题库 >

是否可以使空的RequestParam值使用defaultValue?

岳凯康
2023-03-14
问题内容

如果我有一个类似于以下内容的请求映射:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}

然后使用以下命令调用此请求:

http://example.com/test?i=

我收到错误消息

无法将’java.lang.String’类型的值转换为’int’类型;嵌套的异常是java.lang.NumberFormatException:对于输入字符串:“”

我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白时进行解析来解决此问题。

更新 :春季的更高版本现在实现了最初想要的行为。

我刚刚在春季4.3.5中对此进行了测试,发现该行为现在实际上会将null值转换为默认值而不会引发NumberFormatException,因此;我原来的映射现在可以正常工作了。

我不确定此行为更改是在哪个版本的spring上进行的。


问题答案:

您可以将@RequestParam类型更改为Integer并使它不是必需的。这将使您的请求成功,但是它将为null。您可以在controller方法中将其显式设置为默认值:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", required=false) Integer i) {
    if(i == null) {
        i = 10;
    }
    // ...
}

我从上面的示例中删除了defaultValue,但是如果希望收到根本没有设置的请求,则可能要包括它:

http://example.com/test


 类似资料:
  • 如果我有一个类似于下面的请求映射: 我刚刚在spring 4.3.5中测试了这一点,并发现该行为现在实际上会将空值变为默认值,而不会引发,因此;我原来的地图现在工作良好。 我不确定这种行为改变是在spring的哪一个版本中做出的。

  • 问题内容: 如果我有一个类似于以下内容的请求映射: 然后使用以下命令调用此请求: 我收到错误消息 我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白的情况下进行解析来解决此问题。 更新:spring的更高版本现在实现了最初想要的行为。 我刚刚在spring4.3.5中对此进行了测试,发现该行为实际上实际上会将null值转换为默认值而不会引发NumberFormatEx

  • 我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则

  • 问题内容: 是否可以在python中使用全1来初始化切片? 蟒蛇: 高朗 有可能做得更好吗? 问题答案: 是的,但是您必须使用其他语法。 它被称为“复合文字” 另外,如果有理由进行迭代(如计算基于循环变量的值等),则可以使用关键字而不是旧式,因为i等于i,小于i ++循环。

  • 问题内容: 如果是这样,那么在Objective-C中使用键值观察时是否没有其他键差异? 问题答案: (编辑以添加新信息):考虑使用Combine框架是否可以帮助您完成所需的工作,而不是使用KVO 是的,没有。KVO一直以来都在处理NSObject子类。它不适用于不继承NSObject的类。斯威夫特(目前至少)没有自己的原生观察系统。 (有关如何将其他属性公开为ObjC的信息,请参见注释,以便KV

  • 问题内容: 我将AngularJS与生成html响应的第三方服务一起使用。我想使用ng-repeat将HTML响应呈现为列表,但是Angular将其呈现为文本。 是否可以使用ng-repeat呈现HTML属性? 我创建了这个jsFiddle来演示我的问题。 http://jsfiddle.net/DrtNc/1/ 问题答案: 我认为使用可以满足您的需求。 这是一个有效的小提琴:http : //j