Преобразовать строку в LocalDateTime - PullRequest
0 голосов
/ 10 декабря 2018

Здравствуйте. У меня ошибка регистрации задач, потому что время должно быть преобразовано из Строка в LocalDateTime , и я не знаю, как преобразовать.Ниже я показал класс Task .

@Entity
@Table(name = "task", schema = "public")
public class Task{

 @Id
 @GeneratedValue
 private Long id;

 @NotEmpty
 private String date;

 @NotEmpty
 private LocalDateTime startTime;

 @NotEmpty
 private LocalDateTime stopTime;

 @NotEmpty
 @Column(length=1000)
 private String description;

 @ManyToOne
 @JoinColumn(name="USER_EMAIL")
 private User user;

 public Long getId() {
     return id;
 }
 public void setId(Long id) {
    this.id = id;
 }
 public String getDate() {
     return date;
 }
 public void setDate(String date) {
    this.date = date;
 }
 public LocalDateTime getStartTime() {
    return startTime;
 }
 public void setStartTime(LocalDateTime startTime) {
    this.startTime = startTime;
 }
 public LocalDateTime getStopTime() {
    return stopTime;
 }
 public void setStopTime(LocalDateTime stopTime) {
    this.stopTime = stopTime;
 }
 public String getDescription() {
    return description;
 }
 public void setDescription(String description) {
     this.description = description;
 }
 public User getUser() {
    return user;
 }
 public void setUser(User user) {
    this.user = user;
 }

 public Task(String date, LocalDateTime startTime, LocalDateTime stopTime, String description, User user) {
    this.date = date;
    this.startTime = startTime;
    this.stopTime = stopTime;
    this.description = description;
    this.user = user;
 }
 public Task(String date, LocalDateTime startTime, LocalDateTime stopTime, String description) {
    this.date = date;
    this.startTime = startTime;
    this.stopTime = stopTime;
    this.description = description;
 }
 public Task() {
 }

}

В TaskController класс У меня есть эта функция для регистрации задач в DB

@PostMapping("/addTask")
public String addTask(@Valid Task task,
                      BindingResult bindingResult,
                      HttpSession session,
                      @RequestParam("datetime")
                          @DateTimeFormat(pattern = "dd.MM.yyyy HH:mm:ss.SSSZ") LocalDateTime dateAndTime) {

    if(bindingResult.hasErrors()){
        return "views/taskForm";
    }
    String email = (String) session.getAttribute("email");
    taskService.addTask(task, userService.findOne(email));
    return "redirect:/users";
}

А в TaskService есть функция добавления задач в TaskController .

public void addTask(Task task, User user) {
    task.setUser(user);
    taskRepository.save(task);
}

Возможно, кто-то разрешит эту ошибку

Не удалось преобразовать значение свойства типа java.lang.String в требуемый тип java.time.LocalDateTime для свойства startTime;вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать тип [java.lang.String] в тип [@ org.hibernate.validator.constraints.NotEmpty java.time.LocalDateTime] для значения 09:00;вложенным исключением является java.lang.IllegalArgumentException: попытка разбора не удалась для значения [09:00]

и

Не удалось преобразовать значение свойства типа java.lang.Stringк обязательному типу java.time.LocalDateTime для свойства stopTime;вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать тип [java.lang.String] в тип [@ org.hibernate.validator.constraints.NotEmpty java.time.LocalDateTime] для значения 18:00;вложенное исключение - java.lang.IllegalArgumentException: попытка разбора не удалась для значения [18:00]

, поскольку у меня есть много дней, которые я не могу разрешить.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы можете написать конвертер для преобразования из String в LocalDateTime и наоборот.

@Converter(autoApply = true)
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, String> {

    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public String convertToDatabaseColumn(LocalDateTime locDate) {
        return (locDate == null ? null : formatter.format(locDate));
    }

    @Override
    public LocalDateTime convertToEntityAttribute(String dateValue) {
        return (dateValue == null ? null : LocalDateTime.parse(dateValue, formatter));
    }
}

Если вы хотите определить конвертер для каждой переменной, используйте

@Convert(converter = LocalDateTimeConverter.class)
private LocalDateTime stopTime;
0 голосов
/ 10 декабря 2018

Используйте ниже, чтобы преобразовать время из String в LocalDateTime, но убедитесь, что вы получаете время в форме String.

String str = "2018-12-10 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...