在控制器中
@RequestMapping(value = "/testCalendar")
public String testCalendar(Calendar time){
System.out.println(time == null);
return "request ok" ;
}
在浏览器中打开以下url:127.0.0.1:8090/test/testcalendar
它得到了下面的错误消息 springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.Calendar]: Is it an abstract class?; nested exception is java.lang.InstantiationException] with root cause java.lang.InstantiationException: null atsun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
如果我想得到空日历,我该怎么办?
我试试这个
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Calendar.class, new CalendarEditor());
binder.registerCustomEditor(Date.class, new DateEditor());
}
但还是不行,请帮帮我。
1条答案
按热度按时间jchrr9hc1#
受保护的
我想问题是
Calendar
是一个protected
班级。所以你不能从一个不相关的类示例化。看看这个答案。另一种方法是使用普通的后备班,
GregorianCalendar
.java.time文件
更好的解决办法是避免
Calendar
以及GregorianCalendar
总而言之。这些都是设计得非常糟糕的类,有很多缺陷。它们在几年前被jsr310所取代,jsr310由java.time类实现。分区日期
取代
GregorianCalendar
是ZonedDateTime
.缺少无参数构造函数
请注意,java.time类故意缺少公共构造函数。这也意味着缺少arg构造函数。相反,他们使用工厂方法,如
ZonedDateTime.now
见上图。作为指导,学习java.time命名约定。如果您有一个框架需要一个无arg构造函数,那么您需要找到一个解决方法或适应环境。
关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
java.util.Date
,Calendar
, &SimpleDateFormat
.现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线
java.sql.*
班级。从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9添加了一些次要的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android包java.time类的更高版本实现。
对于早期的android(<26),threetenabp项目采用了threeten backport(如上所述)。了解如何使用threetenabp…。
threeten额外的项目用额外的类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如
Interval
,YearWeek
,YearQuarter
,等等。