java - 无法将类型“java.lang.String”的属性值转换为属性“日期”所需的类型“java.util.Date”:它不完全是 10 个字符长
问题描述
在我的代码中,我有两个实体 BusDetails 和 User。User 和 BusDetails 有多对多的关系。每当我尝试预订巴士时,数据都会保存在数据库的连接表中,但出现此异常:
无法将类型“java.lang.String”的属性值转换为所需类型“java.util.Date”的属性“日期'; 嵌套异常是 java.lang.IllegalArgumentException:无法解析日期:它不完全是 10 个字符长]]
用户表:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int u_id;
@Column
@NotEmpty(message = "Name cannot be empty")
private String name;
@Column
@NotEmpty(message = "Username cannot be empty")
private String userName;
@Column
@NotEmpty(message = "please enter number")
@Size(min = 10,max = 10, message = "10 digits required")
private String number;
@Column
@NotEmpty
@Size(min=8,message = "Minimum 8 characters required")
private String password;
@ManyToMany(cascade = CascadeType.MERGE,fetch = FetchType.EAGER)
@JoinTable(name = "user_role",joinColumns = @JoinColumn(name = "u_id"), inverseJoinColumns = @JoinColumn(name = "r_id"))
public Set<Role> roles;
@ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
@JoinTable(name = "user_busdetails", joinColumns = @JoinColumn(name = "u_id") , inverseJoinColumns = @JoinColumn(name = "bus_Id"))
public Set<BusDetails> bus = new HashSet<BusDetails>();
//gettersAndSetters
巴士详情:
@Entity
@Component("BusDetails")
public class BusDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int bus_Id;
@Column
public String fromDestination;
@Column
public String toDestination;
@Column
@DateTimeFormat
@Temporal(TemporalType.DATE)
private Date date;
@Column
private String travels;
@Column
private String bus_Type;
@Column
private String seats_Available;
@Column
public String fare;
@Column
private String departure;
@ManyToMany(fetch = FetchType.EAGER,mappedBy = "bus")
@JsonIgnore
public Set<User> user = new HashSet<User>();
//gettersAndSetters
图书控制器:
@PostMapping("/bookbus")
@ResponseBody
public BusDetails bookBus(@ModelAttribute BusDetails bus) {
System.out.println(bus.getDate());
return busDetail.bookBus(bus);
}
@InitBinder
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor( Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-
MM-dd"), true, 10));
}
图书服务:
public BusDetails bookBus(BusDetails bus) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipleName = authentication.getName();
User user = userRepo.findByUserName(currentPrincipleName);
user.getBus().add(bus);
System.out.println(user);
System.out.println(bus);
userRepo.save(user);
return bus;
}
解决方案
因为您在控制器中使用了 @ModelAttribute 意味着所有参数都以字符串格式传递。
String
在您的情况下,是从to格式化Date
。
@Entity
@Component("BusDetails")
public class BusDetails {
//...
@Column
private Date date;
//setter(can add or modify) should be custom like below :
public void setDate(String date){
try {
this.date = new SimpleDateFormat("yyyy-MM-dd").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
// ...getter & setter
}
推荐阅读
- sql - 将计算列转换为持久列
- sql - 在 SQL Server 2016 中将 Where IN 与 STRING_SPLIT 和聚合计数一起使用
- r - 如何确定关于组的重复行,然后选择该组的整个元素
- css - CSS动画取消svg上的其他样式
- python - Python:如何覆盖子类中实例属性的类型提示?
- twitter-bootstrap - Bootstrap 4 手风琴折叠/展开全部
- python - 无法使用 Selenium send_keys() 到 WYSWYG 编辑器
- python - Python - pywinauto - 一个输入导致多个动作
- json - 以角度查询json
- javascript - 如何在 Frida JavaScript API 中序列化 Java.choose()?