解析包含Instant日期类型的Json输入时出现错误。

huangapple 未分类评论42阅读模式
英文:

Error in parsing my Json input containing Instant Date type

问题

Caused by: org.springframework.http.converter.HttpMessageNotReadableException: 无效的JSON输入:无法从字符串“2019-07-22 08:09:45”反序列化为类型`java.time.Instant`:无法反序列化java.time.Instant:(java.time.format.DateTimeParseException) 在索引10处无法解析文本'2019-07-22 08:09:45';嵌套异常是com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“2019-07-22 08:09:45”反序列化为类型`java.time.Instant`:无法反序列化java.time.Instant:(java.time.format.DateTimeParseException) 在索引10处无法解析文本'2019-07-22 08:09:45'

返回的Json如下:

{
   "job":"Foo",
   "time":"2020-02-12 18:33:23"
}

我正在使用RestTemplate调用其他服务,但每次都会出现上述异常,显示日期错误。我已经尝试为RestTemplate配置ObjectMapper,但问题仍然存在。

以下是我用于配置RestTemplate的代码片段:

@Bean
public RestTemplate getRestTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(0, createMappingJacksonHttpMessageConverter());
    return restTemplate;
}

@Bean
public ObjectMapper createObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    objectMapper.setDateFormat(df);
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.registerModule(new JavaTimeModule());
    return objectMapper;
}

@Bean
public MappingJackson2HttpMessageConverter createMappingJacksonHttpMessageConverter() {

    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setObjectMapper(createObjectMapper());
    return converter;
}

附:Pojo结构(由于POJO位于公共部分,因此无法编辑)。

String job;
Instant executionTime;
英文:

Caused by: org.springframework.http.converter.HttpMessageNotReadableException: Invalid JSON input: Cannot deserialize value of type `java.time.Instant` from String "2019-07-22 08:09:45": Failed to deserialize java.time.Instant: (java.time.format.DateTimeParseException) Text '2019-07-22 08:09:45' could not be parsed at index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.Instant` from String "2019-07-22 08:09:45": Failed to deserialize java.time.Instant: (java.time.format.DateTimeParseException) Text '2019-07-22 08:09:45' could not be parsed at index 10

The Json being returned is

{
   "job":"Foo",
   "time":"2020-02-12 18:33:23"
}

I am using RestTemplate to call some other service, but every time the above exception pops up giving Date error. I have tried configuring ObjectMapper for RestTemplate but still the same issue.

Below is the code snippet I am using to configure RestTemplate.

@Bean
    public RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(0, createMappingJacksonHttpMessageConverter());
        return restTemplate;
    }

    @Bean
    public ObjectMapper createObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(df);
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }

    @Bean
    public MappingJackson2HttpMessageConverter createMappingJacksonHttpMessageConverter() {

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(createObjectMapper());
        return converter;
    }

PS : Pojo Structure (Can't edit for this use case as POJO's are in commons).

String job;
Instant executionTime;

huangapple
  • 本文由 发表于 2020年4月4日 20:21:49
  • 转载请务必保留本文链接:https://java.coder-hub.com/61028003.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定