2

我正在使用 Spring 3.1 开发一个项目。我们正在做我们所有的验证服务器端,但是当请求参数绑定到 Long 或 Integer 对象时遇到了问题。虽然大多数无效值最终会导致异常并显示错误消息,但当请求参数包含数字之间的空格时,情况并非如此。例如,当绑定“12345 6789”时,我们预计会出现验证错误,但空白只是被修剪掉了。

我使用调试器发现这发生在 org.springframework.util.NumberUtils 中。调用 StringUtils.trimAllWhitespace 以从所有输入中删除空格。这似乎是一个足够常见的用例,但到目前为止我一直无法找到任何有好的解决方案的人。在只接受数字的情况下,将请求参数上的字符串简单转换为 Long 或 Integer 的最佳方法是什么?

4

1 回答 1

0

一个解决方案是创建一个满足您需求的自定义验证器。

取自文档的示例:

约束声明:

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MyConstraintValidator.class)
public @interface MyConstraint {
}

约束实现

import javax.validation.ConstraintValidator;

public class MyConstraintValidator implements ConstraintValidator {

    @Autowired;
    private Foo aDependency;

    ...
}

编辑:

创建自定义属性转换器文档

@Controller 公共类 MyFormController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

    // ...
}
于 2012-12-21T01:11:57.593 回答