Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:java.util.LinkedHashMap不能强制转换为java.time.LocalDateTime_Java_Spring Boot_Localdatetime - Fatal编程技术网

java.lang.ClassCastException:java.util.LinkedHashMap不能强制转换为java.time.LocalDateTime

java.lang.ClassCastException:java.util.LinkedHashMap不能强制转换为java.time.LocalDateTime,java,spring-boot,localdatetime,Java,Spring Boot,Localdatetime,通过LocalDateTime类型参数从Android调用服务。我在将请求参数转换为相同类型(LocalDateTime)发送到LocalDateTime时得到了这个期望值 这就是我正在做的 @PostMapping(value = "/getDates") public Object getDates(@RequestBody Map<Object, Object> request) { LocalDateTime startDate = (LocalDateTime) reque

通过LocalDateTime类型参数从Android调用服务。我在将请求参数转换为相同类型(LocalDateTime)发送到LocalDateTime时得到了这个期望值

这就是我正在做的

@PostMapping(value = "/getDates")
public Object getDates(@RequestBody Map<Object, Object> request) {
LocalDateTime startDate = (LocalDateTime) request.get("fromDate");
LocalDateTime endDate = (LocalDateTime) request.get("toDate");
}

cast操作符执行3种不同的操作:原语转换、类型检查和类型断言

这三样东西就像枪和奶奶:完全,完全,完全无关。他们看起来很相似。到此为止

这三种转换方式中,只有一种是原始转换。正如名称所示,如果括号中的int是一个基本类型,例如“int”,则会发生这种情况

换句话说,
(LocalDateTime)foo
是类型检查:它检查
foo
是否是LocalDateTime。如果是,什么也没有发生。如果否,则抛出
ClassCastException

看起来您希望它将
“fromDate”
参数转换为
LocalDateTime
——转换不是实现这一点的方法

JSON只能表示布尔、数字、字符串、数组和映射。它不能表示日期时间对象。这意味着您的API应该定义如何做到这一点。通常的方法是通过字符串,将日期时间传递到规范中,例如:
“2020-05-20 14:00”
。或者可能是一个数字:自1970年以来的毫秒数,UTC,然后取你在那里找到的本地日期时间,这就是我的意思。这有点笨拙,但这是您的API,您可以根据需要对其进行规范

从您的错误来看,似乎您刚刚向JSON封送器抛出了一个LocalDateTime对象,这将它转换为一个表示LDT对象字段的复杂映射结构

这是行不通的;我强烈建议你重新装备这个

你的第一步是弄清楚你的规格是什么。一旦确定了这一点,第二步就是如何将字符串或毫秒转换为LDT实例(或者,如果坚持的话,转换为这个映射结构)

  • 如果是一个带有年-月-日的字符串,请使用
    java.time.format.DateTimeFormatter
    来创建适当的模式(检查常量,可以在这里找到),并使用:
    LocalDateTime.parse(request.get(“fromDate”)、DateTimeFormatter.ISO\u LOCAL\u DATE\u time)

  • 如果您有epoch millis(我不建议这样做),
    Instant.ofEpochMilli(Long.parseLong(request.get(“fromDate”))).atZone(ZoneOffset.UTC).toLocalDateTime()

  • 使用相同的库(可能是GSON或jackson)来解marshal您用来封送它的地图。客户寄给你的东西?他们正在使用这两个库中的一个。使用相同的方法并反转操作


  • 我强烈推荐选项#1。

    如何在json中发送
    LocalDateTimeObject
    ?您是否尝试解析对象而不是强制转换对象,并依赖框架对其进行适当解析?什么是
    LocalDateTimeObject
    {
    "fromDate":LocalDateTimeObject
    "toDate":LocalDateTimeObject1
    }