Есть ли простой способ превратить пустые формы ввода в пустые строки в Spring MVC?
Я использую Spring MVC и SimpleJdbcInsert для вставки объектов в базу данных MySQL. Я хотел бы установить пустой ввод для NULL
в базе данных, а не ""
. У меня довольно много полей, и я надеюсь найти способ сделать это без ручной проверки каждого значения.
Спасибо!
ОБНОВИТЬ
Так что я идиот. Несколько ошибок с моей стороны заставили меня поверить, что правильные ответы ниже не верны. Я бы написал propertyEditorSupport следующим образом:
class StringEditor extends PropertyEditorSupport {
public void setAsText(String text) {
String value = text.trim();
if ("" == value) {
setValue(null);
} else {
setValue(value);
}
}
}
Есть две проблемы:
- нет getAsText, поэтому моя форма заполнялась пустыми строками!
- моя проверка на равенство C++, а не Java. Когда я попробовал рекомендуемый метод установки, я просто перезагрузил пост, который уже содержал
null
строки. Как только я все это почистил, все начало работать.
Спасибо за помощь, и извините за мою "ошибку оператора"!
Brett
Ответы
Ответ 1
Класс, который вы ищете, это:
org.springframework.beans.propertyeditors.StringTrimmerEditor
Если вы построите его с помощью true
, он преобразует пустые/пробельные строки в нуль. Как его зарегистрировать на связующем, зависит от того, хотите ли вы, чтобы он был по умолчанию или применим только к определенным представлениям.
например, на одном контроллере вы можете просто добавить
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
инструкции здесь
Ответ 2
Я знаю, что это старо, но я потратил около 2 или 3 часов, пока не нашел очень простой способ применить StringTrimmerEditor
со связующим для всех моих контроллеров.
Еще раз: я должен помнить RTFM.
В spring 3.2 вы можете создать класс @ControllerAdvice
-annottated controller и использовать метод @InitBinder
-annotated, как показано в примере @Affe.
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));
}
}
Надеюсь, что это поможет кому-то.
Ответ 3
Возможно, вы можете использовать настраиваемый Binder
Ответ 4
Задайте значение по умолчанию для ваших необязательных полей равным NULL - на самом деле это не NULL по умолчанию?
Разберите свою входную строку и затем явно укажите только заполненные столбцы с помощью
usingColumns
ой, и я бы посоветовал всегда санировать ваши входы...