gpt4 book ai didi

java - 在 POST 请求中反序列化 LocalDateTime 时出错

转载 作者:行者123 更新时间:2023-11-30 05:56:11 26 4
gpt4 key购买 nike

我有一个包含两个 LocalDateTime 成员的类:

public class Foo
{
private final LocalDateTime start;
private final LocalDateTime end;

public Foo(LocalDateTime start, LocalDateTime end)
{
this.start = start;
this.end = end;
}
}

我有一个 Spring Boot Controller 来处理 POST 请求:

@PostMapping(value = "/my-resource")
public ResponseEntity<?> bar(@RequestBody Foo foo)
{
return ResponseEntity.ok().build();
}

如果我按如下方式发送 POST 请求:

curl -X POST \
http://localhost:8080/my-resource \
-H 'Content-Type: application/json' \
-d '{
"start":[2016, 1, 1, 10, 24],
"end":[2016, 1, 1, 10, 24]
}
'

返回以下错误:

"message": "Type definition error: [simple type, class Foo]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `Foo` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (PushbackInputStream); line: 2, column: 2]"

经过一番挖掘后,我向 Foo 添加了一个默认 ctor 并解决了该错误。我还必须从成员中删除 final

我不明白为什么这个解决方案有效。有人能解释一下吗?

最佳答案

只需用 @JsonCreator 注释构造函数即可:

@JsonCreator
public Foo(LocalDateTime start, LocalDateTime end) {
this.start = start;
this.end = end;
}

一旦您的日期使用非常特殊的格式,您就需要编写一个自定义反序列化器来处理它们。

<小时/>

如果你坚持ISO 8601 ,您可以信赖JavaTimeModule :它将为您提供一组serializersdeserializers对于 JSR-310 datatypes

查看详情here .

关于java - 在 POST 请求中反序列化 LocalDateTime 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com