如果表单字段包含空格,则Spring命令对象会抛出整数字段的NumberFormatException

问题描述 投票:0回答:2

有没有办法编写一个公共代码或配置,可以从Web应用程序中从表单提交输入的任何字符串中删除尾随或前导空格,这样我们就不应该在将这些字符串解析为整数或数字时在java代码级别获取NumberFormatException 。例如“15246”。因为在spring命令对象的情况下,如果它有一个整数字段,那么它会尝试隐式地将它转换为整数。除IE浏览器外,其他浏览器不允许数字字段具有前导或尾随空格。

java servlets
2个回答
2
投票

尝试使用java内置修剪方法

" 15246".trim()

然后投入Integer.valueOf(" 15246".trim())


1
投票

如果您使用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);
© www.soinside.com 2019 - 2024. All rights reserved.