com.fasterxml.Jackson.databind.exc. InvalidException:无法构造`java.time.LocalDateTime`的示例

vsaztqbk  于 6个月前  发布在  Java
关注(0)|答案(2)|浏览(108)

在Json中返回字段date time:

"date": "2023-09-22 01:07:50.062477"

字符串
在类Json中:

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
public LocalDateTime date;


返回错误:
原因:com.fasterxml.Jackson.databind.exc. InvalidExceptionException:无法构造java.time.LocalDateTime的示例(不存在创建者,如默认构造):没有要从String值中解析的String参数构造函数/工厂方法(“2023 -09-22 02:11:13.855618”)
如何解决?

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
public LocalDateTime date;

35g0bw71

35g0bw711#

我不知道你如何从前端交互,从前端传递json数据,或者当你调用端点时,把它放在控制器类中的@PathVariable或@RequestParam中:

@RequestMapping(method = RequestMethod.GET, path = "/v{version}", produces = "application/json")
ResponseEntity<List<Test>> findByDate(@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime date)}

字符串
使用此标准ISO方法。

czfnxgou

czfnxgou2#

你会得到这个错误,因为Json试图将date sting转换为LocalDateTime的示例,但由于该类上没有构造函数或类似的方法,它无法做到这一点。
您可以通过扩展JsonDeserializer创建一个自定义的解析器类来获得解决方案,并重写解析器方法并返回到解析所需的。

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

public class CustomLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");

    @Override
    public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        String dateStr = jsonParser.getValueAsString();
        return LocalDateTime.parse(dateStr, formatter);
    }
}

字符串
然后改为使用自定义注解器注解该字段。

@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
public LocalDateTime date;


我相信你有这种依赖性。

implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")


希望这对你有用。我确实在3-4个月前得到了一些捷径。抱歉我忘了。

相关问题