有没有一种简单的方法可以在Spring MVC中将空表单输入转换为空字符串?

2022-09-01 21:37:09

我正在使用Spring MVC和SimpleJdbcInsert将对象插入MySQL数据库。我想在数据库中设置空白输入,而不是。我有很多字段,我希望有一种方法可以做到这一点,而无需手动检查每个值。NULL''

谢谢!


更新

所以我是个白痴。我的几个错误加在一起,使我相信下面的正确答案是不正确的。我写了一个属性编辑器支持,如下所示:

class StringEditor extends PropertyEditorSupport {

    public void setAsText(String text) {
        String value = text.trim();
        if ("" == value) {
            setValue(null);  
        } else {  
            setValue(value);  
        }
    }

}  


有两个问题:

  1. 没有getAsText,所以我的表单被填充了“空”字符串!
  2. 我的平等检查是C++,而不是Java。当我尝试推荐的 setter 时,我只是重新加载了帖子,它已经包含了“null”字符串。一旦我清理了所有这些,一切都开始工作。

感谢您的帮助,并为我的“操作员错误”感到抱歉!

布雷特


答案 1

您要查找的类是:

org.springframework.beans.propertyeditors.StringTrimmerEditor

如果用它构造它,它将把空/空格字符串转换为 null。如何将其注册到绑定器上取决于您是希望它是默认的还是仅适用于某些视图。true

例如,在单个控制器上,您只需添加

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

此处的说明


答案 2

我知道这已经很旧了,但我浪费了大约2或3个小时,直到我找到了一种非常简单的方法,可以在我所有的控制器上应用一个活页夹。StringTrimmerEditor

再说一遍:我必须记住RTFM。

在 spring 3.2 中,您可以创建一个 -annottated 控制器类,并使用 -annotated 方法,就像@Affe给出的示例一样。@ControllerAdvice@InitBinder

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-initbinder-advice

下面是一个示例:

@ControllerAdvice
@Controller
public class AppBindingInitializer {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }

}

希望它能帮助别人。


推荐