java .time.format.DateTimeParseException: текст '03 / 03 / 2020,03 / 03/2020 'не может быть проанализирован, непарсированный текст найден в индексе 10 - PullRequest
1 голос
/ 27 апреля 2020

У меня есть одна форма, которая содержит «НЕТ» и «Дата». Это будет форма Dynami c. При выполнении пакетного обновления в Spring Boot JPA я получил сообщение «java .time.format.DateTimeParseException: текст '03 / 03 / 2020,03 / 03/2020 'не может быть проанализирован, непарсированный текст найден с индексом 10" исключение

@RequestMapping(value="/abcpage", produces = { MediaType.APPLICATION_JSON_VALUE })
public String savePurchaseEntries(@ModelAttribute ABC abc,HttpSession session)
{

    System.out.println(abc);
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    LocalDate today = LocalDate.parse(abc.getDate(),dateTimeFormatter);
    abc.setLoclaDate(today);
    return "redirect:/home";
}

Здесь AB C - класс сущности, и я могу получить значение даты в формате дд / мм / гггг, преобразовать в localdate и установить в сущность.

ABC[NO=101,102,date=03/03/2020,03/03/2020]

для одной записи она работает нормально, но в пакетном режиме выдает исключение.

@Entity
class ABC{ 
@column(name="NO") 
private String NO;
@Transient
private String date;
@Column(name="invdate")
private LocalDate loclaDate;
//getters & setters//tostring
}

1 Ответ

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

Я думаю, что проблема с вашим кодом, если я правильно понял ваш ввод, заключается в том, что вы передаете разделенные запятыми (,) строки даты в LocalDate.parse(abc.getDate(),dateTimeFormatter).

Вам необходимо каждый раз передавать одну дату методу parse (), так как он пытается отформатировать предоставленный ввод строки с форматом форматирования даты и, следовательно, возникает ошибка, когда он встречает запятую (,) при вводе " 03/03 / 2020,03 / 03/2020 ".

Пожалуйста, обратитесь к официальной документации для того же.

Ниже вы можете попробовать:

String[] inputDates = abc.getDate().split[","];
for (String date : inputDates) {
 // you can now use LocalDate.parse(abc.getDate(),dateTimeFormatter) here
 // write your logic here.
}

Надеюсь, это поможет вам прояснить ваши сомнения, если нет, дайте мне знать ваш точный вопрос, и я постараюсь помочь вам.

РЕДАКТИРОВАТЬ 1 Для вставки данных

Ниже приведен способ вставки данных:

Создайте таблицу, в которой будут храниться даты, имеющие 3 столбца - id (PK), abc_id (FK ref. AB C table) , дата (хранить одну дату здесь). Теперь предположим, что имя вышеприведенной таблицы - abc_date_map, а затем ссылаемся на эту сущность как OneToMany в вашей сущности AB C. Как показано ниже,

@Entity
class ABC { 

 @Column(name="NO") 
 private String NO;

 @Transient
 private String date;

 @Column(name="abc_date_map_id")
 private List<AbcDateMap> abcDateMapEntityList;

 //getters & setters//tostring

}

И ваша сущность AbcDateMap будет выглядеть как

@Entity
public class AbcDateMap{

 @Column(name="abc_id")
 private Integer abcId;

 @Column(name="date")
 private LocalDate localDate;

 // getters setters

}

И ваша логика вставки сущности c будет выглядеть так:

public Long insert(ABC abc) {

 abc.setNo(/*something*/);

 List<AbcDateMap> l = new ArrayList<>();

 AbcDateMap abcDate = new AbcDateMap();
 for (String date : abc.getDate().split(",")) {
  abcDate.setLocalDate(/*parse date here and store*/);
  abcDate.setAbcId(abc.getId());
 }
 abc.setAbcDateMapEntityList(l);
 repo.save(abc);

}

Теперь Выше приведен не точный код, вам придется вычеркнуть его sh, возможно, есть ошибки синтаксиса / семантики. Также вам нужно будет изменить его в соответствии с вашими требованиями.

Надеюсь, это поможет вам.

Удачи и счастливого обучения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...