【发布时间】:2018-06-15 08:11:00
【问题描述】:
我想做什么: 用户将通过 html 表单输入日期和时间,这些值将保存到 MySQL 数据库中。
createPost.html
<form action="#" th:action="@{/createPost}" th:object="${post}" method="POST">
<p>Description: <input type="text" th:field="*{text}" /> </p>
<!--
<p>Time: <input type="datetime-local" th:field="*{dateTime}" /> </p>
-->
<p>date: <input type="date" th:field="*{date}" /></p>
<p>time: <input type="time" th:field="*{time}" /></p>
<p><input class="submitButton" type="submit" value="Submit" /> </p>
</form>
Post.java
@Entity
public class Post {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String user;
private String text;
/*
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
private LocalDateTime dateTime;
*/
private java.sql.Date date;
private LocalTime time;
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date myDate;
//getters ans setters
}
PostController.java
@RequestMapping(value="/createPost", method=RequestMethod.POST)
public String createPost(@ModelAttribute Post post){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentUser = authentication.getName();
post.setUser(currentUser);
postRepository.save(post);
return "redirect:/";
}
目前我收到此错误:
"bean 类 [com.example.demo.Post] 的无效属性 'date':bean 属性 'date' 不可读或有无效的 getter 方法:getter 的返回类型是否与参数匹配设置器的类型?”
我尝试了很多不同的东西,但我什么都做不了。 获取用户日期和时间输入并将其保存到数据库的推荐方法是什么?
编辑:
您只能绑定可以用简单类型定义的模型对象。当对象从客户端序列化到服务器时,它不知道复杂类型(如java.time.LocalDate),除非它们用简单类型表示。
我现在通过编写一个将字符串转换为 sql.Date 的函数解决了这个问题
public Date getDateFromString(String dateString){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date parsed = null;
try {
parsed = format.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
Date date = new Date(parsed.getTime());
return date;
}
并将 PostController.java 更改为:
@RequestMapping(value="/createPost", method=RequestMethod.POST)
public String createPost(@ModelAttribute Post post, String date){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentUser = authentication.getName();
post.setUser(currentUser);
Utilities utilities = new Utilities();
post.setDate(utilities.getDateFromString(post.getDatestring()));
postRepository.save(post);
return "redirect:/";
}
丑陋但至少它有效,如果有人有更好的解决方案请告诉
【问题讨论】:
-
你使用的是什么版本的休眠?您收到错误的日期类型是什么?您的模型类中有三个日期/时间字段
-
考虑到该错误在
Post中抱怨属性date的getter 和setter,我认为发布该类的getter 和setter 是相关的。 -
休眠核心 {5.0.12.Final}。 java.sql.Date(也适用于 getter/setter)当前错误,但我也尝试过 Timestamp 和 LocalDate 但我无法让它们中的任何一个工作
-
您能否发布您的 getter 和 setter 的实际代码,尤其是来自
date字段的代码。 -
public java.sql.Date getDate(){ 返回日期; } public void setDate(java.sql.Date date){ this.date = date; }
标签: java html mysql spring spring-boot