Не удалось преобразовать значение 'java .lang.string' в 'java .localtime' из jsp в Springboot - PullRequest
0 голосов
/ 12 апреля 2020

Я очень новичок в SpringBoot. У меня есть некоторые проблемы с преобразованием значения String, которое я получаю из формы jsp в LocalTime. Например, у меня есть форма jsp, в которую я записываю свой ввод:

<div class="col-lg-7">
    <form:input path="shiftStart" type="time" name="shiftStart" id="shift-start-time" min="08:00:00" max="17:45:00" step="900"></form:input>
</div>

, и у меня есть следующий контроллер, где я пытаюсь преобразовать это строковое значение в переменную LocalTime:

@PostMapping("/add-shift")
public String createShiftForm(@ModelAttribute("shiftForm") @Valid TimeTable timeTable, BindingResult result, Model model, @RequestParam("shiftStart") String shiftStart ){
    if (result.hasErrors()) {
        return "/add-shift";
    }
   LocalTime startShift = LocalTime.parse(shiftStart);
   model.addAttribute("shiftStart",startShift);
   return "redirect:/admin";
}

и я получаю следующую ошибку:

Failed to convert property value of type java.lang.String to required type java.time.LocalTime for property shiftEnd; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.Column java.time.LocalTime] for value 09:15; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [09:15]

Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Я нашел решение: просто нужно передать параметр без @RequestParametr в Controller и преобразовать строку в локальное время в локальную переменную следующим образом:

 @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.TIME) LocalTime  shiftStart

Здесь обсуждалось: Как использовать LocalDateTime RequestParam весной? Я получаю сообщение "Не удалось преобразовать строку в LocalDateTime"

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

Как сказал Эларби, я также рекомендую использовать стандартный форматтер:

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_TIME; 

LocalTime lt = LocalTime.parse("10:15:45", formatter);

Или напрямую:

LocalTime lt = LocalTime.parse("10:15:45", DateTimeFormatter.ISO_LOCAL_TIME);

Для списка шаблонов рассмотрим это из официальный Oracle до c.

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

Вам нужно разобрать значение String до LocalTime, чтобы сделать это, вам нужно выяснить, в каком формате вы его получаете, и просто добавьте этот код:

LocalTime startShift = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm"));
...