如果表单字段包含空格,则Spring命令对象会抛出整数字段的NumberFormatException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果表单字段包含空格,则Spring命令对象会抛出整数字段的NumberFormatException相关的知识,希望对你有一定的参考价值。
有没有办法编写一个公共代码或配置,可以从Web应用程序中从表单提交输入的任何字符串中删除尾随或前导空格,这样我们就不应该在将这些字符串解析为整数或数字时在java代码级别获取NumberFormatException 。例如“15246”。因为在spring命令对象的情况下,如果它有一个整数字段,那么它会尝试隐式地将它转换为整数。除IE浏览器外,其他浏览器不允许数字字段具有前导或尾随空格。
尝试使用java内置修剪方法
" 15246".trim()
然后投入Integer.valueOf(" 15246".trim())
如果您使用Spring-Boot 2,它将立即开箱即用:
test.Java
package hello;
public class Test {
private Integer test;
public Integer getTest() {
return test;
}
public void setTest(Integer test) {
this.test = test;
}
@Override
public String toString() {
return "Test{test=" + test + '}';
}
}
test controller.Java
package hello;
@RestController
public class TestController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String testGet(@RequestParam("test") Integer integer) {
return "" + integer;
}
@RequestMapping(value = "/test_p", method = RequestMethod.POST)
public String testPost(@RequestBody Test test) {
return "" + test;
}
}
用curl测试POST
curl -X POST
http://localhost:8080/test_p
-H 'Content-Type: application/json'
-d '{"test": " 876867"}'
测试{测试= 876867}
用卷曲测试GET
curl -X GET
'http://localhost:8080/test?test=%20542543'
-H 'Content-Type: application/json'
542543
这项工作的原因来自class StringToNumberConverterFactory
其中使用NumberUtils which indeed trims all whitespace
String trimmed = StringUtils.trimAllWhitespace(text);
以上是关于如果表单字段包含空格,则Spring命令对象会抛出整数字段的NumberFormatException的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 AngularJS 中的日期输入字段会抛出类型错误?
Spring boot:如何使 ContentType 标头完全可选?如果未通过,它会抛出 HttpMediaTypeNotSupportedException