当前位置: 首页 > 知识库问答 >
问题:

无法将缓存的json数据反序列化为AsyncResult

卢作人
2023-03-14

我在redis实现中使用spring缓存,我有以下方法

@Async
@Cacheable(key = "#id")
public Future<Student> getStudent(String id){
  Student stu  = ...;
  return new AsyncResult<>(stu);
}

当我第一次访问该方法时,数据以json格式缓存到redis中。

但是当我第二次访问它时,它会出现一些错误,如下所示:

Java语言util。同时发生的执行例外:组织。springframework。数据redis。序列化程序。SerializationException:无法读取JSON:无法构造org的实例。springframework。行程安排。注释。AsyncResult(不存在像默认构造那样的创建者):无法从对象值反序列化(没有基于委托或属性的创建者)

[编辑]

我找到了一个解决方法:新的MyAsyncReslt。java,它扩展了AsyncResult并添加了NoArgsConstructor。

共有1个答案

韩飞翮
2023-03-14

Redis Serializer使用Jackson under hood类Jackson2JsonRedisializer,错误为:

无法构造组织的实例。springframework。行程安排。注释。AsyncResult(不存在像默认构造那样的创建者):无法从对象值反序列化(没有基于委托或属性的创建者)

似乎来自Jackson(没有默认构造函数无法反序列化):

com.fasterxml.jackson.databind.exc.:无法构造Type的实例(不存在创建者,如默认构造):无法从对象值反序列化(没有基于委托或属性的创建者)

确保模型类Student的结构正确,符合Jackson-Jackson对象序列化,因为它通过泛型在AsyncResult中使用。

根据OP问题编辑:

我找到了一个解决方法:新的MyAsyncReslt。java,它扩展了AsyncResult并添加了NoArgsConstructor。

Spring的AsyncResult似乎没有正确实现以使用Jackson序列化(检查Github spring-project/spring-Framework: AsyncResult)。

public class AsyncResult<V> implements ListenableFuture<V> {
    // ...

    public AsyncResult(@Nullable V value) {
        this(value, null);
    }

    private AsyncResult(@Nullable V value, @Nullable Throwable ex) {
        this.value = value;
        this.executionException = ex;
    }

    // Missing empty constructor to comply with Jackson requirements:
    public AsyncResult() {}

// ...

在问题得到修补之前,您可以扩展Spring的AsyncResult并提供所需的空构造函数。在代码中自由使用您的自定义AsyncResult。

 类似资料:
  • 我是一个新手,正在尝试编写一个简单的应用程序,从大学校中提取一些学校数据。组织。json数据如下所示: 我的结构如下所示: 当我运行代码时,我得到“json:无法将对象解组为[]main.SchoolStruct类型的Go值” 我正在使用gopencils库来提出我的请求,并成功地将其用于非常简单的请求。你知道我可能做错了什么吗?

  • 问题内容: 我正在尝试将json数据反序列化为模型类,但是失败了。这是我的工作: 这是我的模型的样子: 您可以看到我到达这里的Json:http : //api.worldbank.org/incomeLevels/LIC/countries? format=json 这是我得到的错误: 无法将JSON数组反序列化为“ Mvc4AsyncSample.Models.CountryModel”类型。

  • 问题内容: 这是我的课 最初的一个实际上需要转换为良好的json数据。这是最初的坏人 这是我的json数据,我无法反序列化。即使更改,我仍会收到默认值 我的自定义封面 问题答案: 您可以使用json.net以显示的格式对a进行反序列化和重新序列化,只要您使用custom即可。这是必需的,因为默认情况下,对象集合在JSON数组之间进行序列化,但是在JSON中,对象集合以单个对象的紧凑形式进行序列化,

  • 问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注

  • 我需要将下面两个foramt反序列化为单个代码中的 嵌套异常是org.springframework.http.converter.httpmessageNotreadableException:JSON解析错误:无法反序列化字符串类型的值“2020-04-23t10:51:24.238+01:00”:com.fasterxml.jackson.databind.exc.invalidformat