尝试将数据显示到UI时遇到问题。
当我在MySQL中使用此查询从表中获取Datetime日期时。它确实会返回我想要的记录
guard let managedObj = NSEntityDescription.insertNewObject(forEntityName: entityName, into: Self.persistentContainer.viewContext) as? ManagedObject else {
throw CoreDataError.entityNotDeclared(name: entityName)
}
但是当我使用Spring将相同的数据输入表单并提交时,什么也没有返回。我使用的输入是相同的。
我在Controller类中指定了@DateTimeFormat批注,使用的模式与数据库中显示的模式相同,即“ yyyy-MM-dd”
select flight0_.id as id1_0_, flight0_.arrival_city as arrival_2_0_, flight0_.date_of_departure as date_of_3_0_, flight0_.departure_city as departur4_0_, flight0_.estimated_departure_time as estimate5_0_, flight0_.flight_number as flight_n6_0_, flight0_.operating_airlines as operatin7_0_ from flight flight0_ where flight0_.departure_city='AUS' and flight0_.arrival_city='NYC' and flight0_.date_of_departure='02-05-2018'
这是我的存储库类:
@RequestMapping("findFlights")
public String findFlights(@RequestParam("from") String from, @RequestParam("to") String to,
@RequestParam("departureDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date departureDate,
ModelMap modelMap) {
List<Flight> flights = repository.findFlights(from, to , departureDate);
modelMap.addAttribute("flights", flights);
return "displayFlights";
}
为了进行测试,我试图删除该注释并停止从该列中查询,它按预期工作。因此,我很确定@DateTimeFormat批注根本不起作用。还是可以,但是以某种方式,Hibernate无法理解我定义的模式。
我还尝试输入屏幕上显示的值,即2018-02-05 08:00:00.0,但没有任何困难。
有人可以给我任何想法吗?请帮忙!
答案 0 :(得分:1)
谢谢, 我自己弄清楚了。 我目前在马来西亚吉隆坡工作。因此,默认的'UTC'时区与MySQL日期时间格式不匹配。 (仍使用SYSTEM时间)。 我在application.properties中进行了更改
spring.datasource.url=jdbc:mysql://localhost:3306/reservation?useLegacyDatetimeCode=false&serverTimezone=Asia/Kuala_Lumpur
现在一切正常。
答案 1 :(得分:0)
您在MySQL查询中写了flight0_.date_of_departure='02-05-2018'
。但是在您的输入形式中为2018-02-05
,在Controller方法中为pattern = "yyyy-MM-dd"
。如果此方法获得2018-02-05
,则“认为” 02是一个月。
我认为日期格式为yyyy-MM-dd和yyyy-dd-MM的问题。此外,我们谈论的是美国航空:)
1-尝试在调试器中查看日期的值。
2-尝试使用明确的日期(例如2017-12-20),也许您会看到一个例外。
3-在查询中尝试使用f.dateOfDeparture>=:dateOfDeparture
(可能是时间问题,而不是日期问题)。