zoukankan      html  css  js  c++  java
  • Json timestamp转LocalDateTime报错JSON parse error: raw timestamp (1595952000000) not allowed for `java.time.LocalDateTime`: need additional information such as an offset or time-zone (see class Javadocs)

    异常信息

    Error while extracting response for type [class com.xxx.xxx.provider.user.entity.User] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException:
    JSON parse error: raw timestamp (1595952000000) not allowed for `java.time.LocalDateTime`: need additional information such as an offset or time-zone (see class Javadocs);
    nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: raw timestamp (1595952000000) not allowed for `java.time.LocalDateTime`: need additional information such as an offset or time-zone
    (see class Javadocs) at [Source: (PushbackInputStream); line: 1, column: 234] (through reference chain: com.xxx.xxx.provider.user.entity.User["birthday"])

    在数据库查询后,往调用方返回的序列化结果时,做了一层转化,把LocalDataTime转为时间戳,但是在内部feign调用时,接收方需要LocalDataTime,此时就出现这个异常.

    解决办法加一个LocalDataTime序列化的配置类,在接受时再转一次.

    @Configuration
    public class LocalDateTimeSerializerConfig {
    
        @Bean
        public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
            return builder -> {
                builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer());
                builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer());
            };
        }
    
        /**
         * 序列化
         */
        public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
            @Override
            public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
                    throws IOException {
                if (value != null) {
                    long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
                    gen.writeNumber(timestamp);
                }
            }
        }
    
        /**
         * 反序列化
         */
        public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
            @Override
            public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)
                    throws IOException {
                long timestamp = p.getValueAsLong();
                if (timestamp > 0) {
                    return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
                } else {
                    return null;
                }
            }
        }
    }
  • 相关阅读:
    Python 爬虫js加密破解(一) 爬取今日头条as cp 算法 解密
    Python 爬虫实例(2)—— 爬取今日头条
    Python 爬虫实例(1)—— 爬取百度图片
    python 操作redis之——HyperLogLog (八)
    python 操作redis之——有序集合(sorted set) (七)
    Python操作redis系列之 列表(list) (五)
    Python操作redis系列以 哈希(Hash)命令详解(四)
    Python操作redis字符串(String)详解 (三)
    How to Install MySQL on CentOS 7
    Linux SSH远程文件/目录 传输
  • 原文地址:https://www.cnblogs.com/runwithraining/p/13606692.html
Copyright © 2011-2022 走看看