【问题标题】:java.time.format.DateTimeParseException: Text '2016-06-03T00:38:48.043Z' could not be parsed, unparsed text found at index 23java.time.format.DateTimeParseException:无法解析文本“2016-06-03T00:38:48.043Z”,在索引 23 处找到未解析的文本
【发布时间】:2016-10-02 22:20:43
【问题描述】:

我在我的实体中定义了 java8 LocalDateTime 参数。 我已经在 Wildfly 10 中部署了我的 jax-rs webapp。

当我进行 REST 调用时,出现以下异常;

Caused by: java.time.format.DateTimeParseException: Text '2016-06-03T00:38:48.043Z' could not be parsed, unparsed text found at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer.deserialize(LocalDateTimeDeserializer.java:63)
    at com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer.deserialize(LocalDateTimeDeserializer.java:36)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
    at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
    ... 56 more

我已经在 ObjectMapper 中注册了 JavaTimeModule;

@Provider
public class LocalDateTimeConverterProvider implements ContextResolver<ObjectMapper>, ParamConverterProvider {

    private final LocalDateTimeConverter converter = new LocalDateTimeConverter();

    private final ObjectMapper mapper;

    public LocalDateTimeConverterProvider() {
        mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.registerModule(new JavaTimeModule());


    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

为什么我得到上述异常? Java8 JavaTimeModule 提供的默认序列化器不起作用?

【问题讨论】:

  • 你序列化的时候,是不是和异常中的日期格式一样?
  • @peeskillet 我有这种格式的东西“2016-06-03T03:44:14.919”
  • 你用的是什么版本的java时间模块?为什么错误中的格式与此格式“2016-06-03T03:44:14.919”不匹配?
  • @ShivV 我用这个模块; com.fasterxml.jackson.datatype.jsr310.JavaTimeModule.JavaTimeModule() 版本 2.7.4(错误?)
  • 那么当您序列化日期时输入的是“2016-06-03T03:44:14.919”还是“2016-06-03T00:38:48.043Z”?如果使用 ZonedDateTime,第一个应该可以工作,第二个可以工作,这就是我的想法。

标签: hibernate rest jackson jax-rs wildfly


【解决方案1】:

使用 ISO_DATE_TIME 格式注册您的本地日期时间反序列化器,以允许本地日期时间接受时区。

javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME)

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多