将字符串转换为Longs时Spring会删除空格

时间:2012-12-20 18:52:27

标签: spring

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

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

1 个答案:

答案 0 :(得分:0)

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

取自documentation

的示例

约束声明:

@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;

    ...
}

修改

创建自定义属性转换器documentation

@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));
    }

    // ...
}