java.time.format.DateTimeParseException:无法解析文本“03/03/2020,03/03/2020”,在索引 10 处找到未解析的文本

2023-12-08

我有一张包含“否”和“日期”的表格。它将是动态形式。在 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";
}

这里 ABC 是实体类,我可以获取 dd/mm/yyyy 格式的日期值并将其转换为 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
}

如果我正确理解了您的输入,我认为您的代码存在问题,那就是您正在传递逗号(,)分隔的日期字符串LocalDate.parse(abc.getDate(),dateTimeFormatter).

您需要每次向 parse() 方法传递一个日期,因为它尝试使用日期格式化程序格式来格式化提供的字符串输入,因此在“03/03/2020,”的输入中遇到逗号(,) 时会发生错误2020 年 3 月 3 日”。

请参阅官方文档相同。

您可以尝试以下操作:

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

我希望这可以帮助您消除疑问,如果没有让我知道您的确切问题,我会尽力帮助您。

EDIT 1用于插入数据

以下是插入数据的一种方法,

创建一个表,该表将存储具有 3 列的日期 - id(P.K.)、abc_id(ABC 表的 F.K. ref.)、日期(此处存储单个日期)。 现在假设上表的名称是 abc_date_map,然后在 ABC 实体中将该实体引用为 OneToMany。就像下面这样,

@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
 
}

您的实体插入逻辑将类似于:

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);

}

上面不是确切的代码,您必须对其进行修改,可能存在语法/语义错误。您还需要根据您的要求进行更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.time.format.DateTimeParseException:无法解析文本“03/03/2020,03/03/2020”,在索引 10 处找到未解析的文本 的相关文章

随机推荐