Правильная форма ввода Thymeleaf для хранения LocalDateTime - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь сохранить LocalDateTime в форме Thymeleafe, но безуспешно. Что у меня сейчас:

Модель:

public class Example{
    ...
    private LocalDateTime creationDate;
    ...

Контроллер:

@PostMapping("/saveExample")
public String saveOrUpdate(@Valid @ModelAttribute("example") Example example, BindingResult bindingResult) {

Форма:

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

Ошибка, что я Получение:

[Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'creationDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.Column java.time.LocalDateTime] for value '2020-01-17'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-01-17]]

Я пробовал много разных решений от Google, но безуспешно. Какие-либо предложения? С наилучшими пожеланиями.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Вам необходимо добавить @DateTimeFormat аннотацию к полям LocalDateTime в вашей сущности. Например:

@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDateTime creationDate;
0 голосов
/ 11 января 2020

Похоже, вы пытаетесь проанализировать значение '2020-01-17' , но это недопустимое значение для LocalDateTime class.

Возможные решения:

  1. Использование LocalDate вместо LocalDateTime в классе вашей модели

  2. Использование String вместо LocalDateTime в классе модели, а затем (в каком-то классе обслуживания, например) проанализируйте значение String, используя собственный DateTimeFormatter:

    DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .toFormatter();

    LocalDateTime time = LocalDateTime.parse("2020-01-17", formatter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...