Java 为什么LocalDateTime没有字符串构造函数?

Java 为什么LocalDateTime没有字符串构造函数?,java,java-8,java-time,date,Java,Java 8,Java Time,Date,我最近在尝试通过Spring MVC将JSON数据发布到具有属性的POJO时遇到以下错误: no String-argument constructor/factory method to deserialize from String value 为了解决这个错误,我不得不将setter从 public void setToDate(LocalDateTime toDate) { this.toDate = toDate; } 到 这就给我留下了一个问题:LocalDateTime

我最近在尝试通过Spring MVC将JSON数据发布到具有属性的POJO时遇到以下错误:

no String-argument constructor/factory method to deserialize from String value
为了解决这个错误,我不得不将setter从

public void setToDate(LocalDateTime toDate) {
    this.toDate = toDate;
}

这就给我留下了一个问题:
LocalDateTime
为什么没有一个
String
构造函数和一个静态方法?

(几乎)java.time中的类都没有构造函数,至少没有公共构造函数。您只能通过调用其中一个静态工厂方法(其中
~.parse()
是其中之一)来创建这些类的实例

当然,在创建
java.time
包时,这是一个设计决策


做出这个决定的一个原因可能是,有一条规则规定构造函数不应该抛出异常,因为某些原因我现在记不起来了。但是很明显,从任意字符串构造
LocalDateTime
的实例会导致许多可能的错误。

您不需要更改setter,您可以使用
LocalDateTime
保留默认setter。您只需使用
myobj.setToDate(LocalDateTime.parse(“…”)
。没有构造函数
LocalDateTime(String)
,因为
String
有不同的用法。这不是约会的对象/time@KunLun数据从POST请求中的
@ResponseBody
映射而来。因此,我恐怕无法将解析后的日期作为参数传递。我认为这与此有关(请参阅《有效Java》一书的引用@TobyBook,因为它本身的字符串是不够的。您还需要知道它是如何格式化的(例如)
public void setToDate(String toDate) {
    this.toDate = LocalDateTime.parse(toDate);
}