我正在使用Spring 3.1开发一个项目。我们正在执行所有验证服务器端,但是当请求参数绑定到Long或Integer对象时遇到问题。虽然大多数无效值最终会导致异常并显示错误消息,但当请求参数包含数字之间的空格时,情况并非如此。例如,当绑定“12345 6789”时,我们会期望验证错误,但是空格正在被修剪掉。
我使用调试器发现这是在org.springframework.util.NumberUtils中发生的。调用StringUtils.trimAllWhitespace以从所有输入中删除空白。这似乎是一个常见的用例,但到目前为止我还没有找到任何有良好解决方案的人。在仅接受数字的情况下,将请求参数上的字符串简单转换为Long或Integer的最佳方法是什么?
答案 0 :(得分: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;
...
}
修改强>
创建自定义属性转换器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));
}
// ...
}