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

使空的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客户端发送空参数或接受字符串值并仅在未发现空白的情况下进行解析来解决此问题。

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

我刚刚在spring4.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


 类似资料:
  • 问题内容: 如果我有一个类似于以下内容的请求映射: 然后使用以下命令调用此请求: 我收到错误消息 无法将’java.lang.String’类型的值转换为’int’类型;嵌套的异常是java.lang.NumberFormatException:对于输入字符串:“” 我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白时进行解析来解决此问题。 更新 :春季的更高版本现在

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

  • 看起来在这个话题上有一些问题,但许多问题现在已经过时,或者问的是不同的问题。 例如,我想做 我不想在 我有一个方法签名,它同时接受请求参数和请求主体(它是Kotlin,但我不认为这实际上有什么不同)。 我可以很好地访问RequestParam,但是RequestBody包含的不仅仅是我在body中发送的JSON,它包含了body和请求参数的合并。在上面的示例中,它将为body绑定输出以下内容 有没

  • 根据Spring中文件上传的标准方式:https://spring.io/guides/gs/uploading-files/,我们将使用@requestparam(“file”)MultipartFile文件接收从表单上传的文件。 但是我想知道为什么注释是“requestparam”而不是“requestbody”,因为在我们指定“method=post”的表单中,数据不应该在表单post bo

  • 我的数据库中有一些值,如果还没有输入的话,它们可能为空。 但是当我在我的html中使用Thymeleaf时,它在解析空值时出错。 这个有什么办法处理吗

  • 我正在创建一个rest方法,它可以使用RequestParam注释处理一个可选参数(在本例中是性别)。但性别值始终被视为空值。(spring Version4.0.0)第二个参数被认为是正确的。 提前谢了。潘卡杰