2016-12-07 8 views
0

Я создаю веб-приложение с использованием Thymeleaf и SpringBoot, я новичок в обоих технологии.Thymeleaf и SpringBoot - Не удалось преобразовать значение свойства типа [java.lang.String] в требуемый тип [java.util.Date] для prope

В моем HTML файл, есть поле Даты следующим образом:

<input type="date" th:field="*{issueDate}" /> 

Моя модель класса есть поле, соответствующее IssueDate следующим образом:

@NotNull(message = "Cannot be empty") 
private Date issueDate; 

Когда я ввод дата из UI, я вижу в браузере следующее исключение:

Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property issueDate; 

Из моего опыта я понимаю, что пользовательский интерфейс считывает свойство как String, но модель ожидает тип Date, из-за которого возникает ошибка. Поэтому мне нужно преобразовать String в Date. Однако, где это должно быть сделано? Поскольку ошибка возникает даже до вызова метода setter в модели.

Любая помощь будет высоко оценена! Заранее спасибо!

+0

можете ли вы показать свой контроллер и больше вашего html-файла, пожалуйста. – Patrick

ответ

1

В контроллере:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true)); 
} 

ГДЕ "MM/DD/YYYY" формат даты вы используете.

+0

Спасибо за ответ, который сработал, поэтому исключение больше не выбрасывается. Однако дата не выглядит корректно, неверная дата сохраняется в БД. Я проверю это. Другая вещь, которую я хотел знать, - когда вызывается этот метод initBinder? Вызывается ли он перед методами setter в модели? – Reshma

+0

Да, все это часть процесса. Это называется автоматически весной при заполнении модели (до вызова сеттеров). Что касается разбора даты, вы должны изменить дату на формат, который я предоставил («MM/dd/yyyy»), в формат даты, который вы используете, в соответствии с этой спецификацией: https://docs.oracle.com/javase/ 8/docs/api/java/text/SimpleDateFormat.html – Metroids

+0

Еще раз спасибо, это было полезно. Я также выяснил вопрос о дате, не знаю, почему формат даты требуется как yyyy-MM-dd, поэтому, когда я задал этот формат даты в initBinder, он работал нормально. Я использую html тип даты в качестве входных данных в форме, поэтому, когда пользователь вводит дату, она вводится как dd-MM-yyyy. Поэтому не уверен, почему работал yyyy-MM-dd! – Reshma

Смежные вопросы

 Смежные вопросы