码迷,mamicode.com
首页 > 其他好文 > 详细

LinkedHashMap转成实体类时遇到String转ZonedDateTime异常

时间:2020-03-20 12:48:11      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:ati   number   ystemd   pass   exce   enc   ring   emd   column   

  今天在进行进行数据转换的时候遇到一个异常,java.util.LinkedHashMap cannot be cast to xxx,其中最关键的就是Expected BEGIN_OBJECT but was STRING at line 1 column 644 path $[0].validEndDateTime。异常原因已经很详细了,就是在转换的时候String类型的数据转换成ZonedDateTime出现的问题。经过google之后,我使用如下的办法解决Bug。

  引用jar包:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>

 

  工具类

public class GsonUtil {
    public static final JsonDeserializer<ZonedDateTime> ZDT_DESERIALIZER = new JsonDeserializer<ZonedDateTime>() {
        @Override
        public ZonedDateTime deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
            JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
            try {
                // if provided as String - ‘2011-12-03T10:15:30+01:00[Europe/Paris]‘
                if(jsonPrimitive.isString()){
                    return ZonedDateTime.parse(jsonPrimitive.getAsString(), DateTimeFormatter.ISO_ZONED_DATE_TIME);
                }
                // if provided as Long
                if(jsonPrimitive.isNumber()){
                    return ZonedDateTime.ofInstant(Instant.ofEpochMilli(jsonPrimitive.getAsLong()), ZoneId.systemDefault());
                }
            } catch(RuntimeException e){
                throw new JsonParseException("Unable to parse ZonedDateTime", e);
            }
            throw new JsonParseException("Unable to parse ZonedDateTime");
        }
    };
}

 

运行code

List<TicketAndPassEntitlement> ticketList = new GsonBuilder()
        .registerTypeAdapter(ZonedDateTime.class, GsonUtil.ZDT_DESERIALIZER)
        .create()
        .fromJson(new Gson().toJson(resourceList), new TypeToken<List<TicketAndPassEntitlement222>>(){}.getType());

 

解释: 

new Gson().toJson(resourceList)的目的是将List<LinkedHashMap>转换成Gson格式的数据。
GsonUtil工具类是为了解决String转成ZonedDateTime的问题。

 

LinkedHashMap转成实体类时遇到String转ZonedDateTime异常

标签:ati   number   ystemd   pass   exce   enc   ring   emd   column   

原文地址:https://www.cnblogs.com/daishoucheng/p/12530768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!