Spring Boot + Thymeleaf:将空表单输入绑定到 NULL 字符串
Spring Boot + Thymeleaf: Bind empty form input to NULL-string
我有一个非常简单的 Spring Boot + Thymeleaf 应用程序,它有一个表单和一个 pojo 作为表单的支持模型。
支持模型有一个字符串 属性 默认为空:
public class Model {
private String text = null;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "Model [text=" + (text == null ? "<null>" : text.isEmpty() ? "<empty>" : text) + "]";
}
}
表单有一个绑定到 属性:
的输入字段
<form action="#" th:action="@{/}" th:object="${model}" method="post">
<label th:for="${#ids.next('text')}">Text</label>
<input type="text" th:field="*{text}" />
<button type="submit">Submit</button>
</form>
但是,无论何时提交表单,该值都将设置为“”(空字符串)而不是空值。
有没有一种简单的方法可以将 属性 设置为 null 而不是空字符串?
运行 示例项目可以在 https://github.com/smilingj/springboot-empty-string-to-null 找到。
向您的控制器添加一个 initbinder
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
参考官方参考
我有一个非常简单的 Spring Boot + Thymeleaf 应用程序,它有一个表单和一个 pojo 作为表单的支持模型。
支持模型有一个字符串 属性 默认为空:
public class Model {
private String text = null;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "Model [text=" + (text == null ? "<null>" : text.isEmpty() ? "<empty>" : text) + "]";
}
}
表单有一个绑定到 属性:
的输入字段<form action="#" th:action="@{/}" th:object="${model}" method="post">
<label th:for="${#ids.next('text')}">Text</label>
<input type="text" th:field="*{text}" />
<button type="submit">Submit</button>
</form>
但是,无论何时提交表单,该值都将设置为“”(空字符串)而不是空值。
有没有一种简单的方法可以将 属性 设置为 null 而不是空字符串?
运行 示例项目可以在 https://github.com/smilingj/springboot-empty-string-to-null 找到。
向您的控制器添加一个 initbinder
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
参考官方参考