如果表单字段包含空格,则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的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MERGE 语句会抛出唯一键约束错误

为啥我在 AngularJS 中的日期输入字段会抛出类型错误?

Spring boot:如何使 ContentType 标头完全可选?如果未通过,它会抛出 HttpMediaTypeNotSupportedException

使用本地存储数据生成字段时如何删除表单验证错误

在 Django 1.7 迁移中调用 loaddata 会抛出“‘字段列表’中的未知列‘[字段]’”

如果我不告诉 C++ 中要抛出啥类型的对象,会抛出啥 throw 语句?