无法序列化“org.springframework.http.ResponseEntity”HazelcastCache

Posted

技术标签:

【中文标题】无法序列化“org.springframework.http.ResponseEntity”HazelcastCache【英文标题】:Failed to serialize 'org.springframework.http.ResponseEntity' HazelcastCache 【发布时间】:2020-09-01 20:09:27 【问题描述】:

我正在使用 Hazelcast 进行缓存,

我的控制器看起来像这样:

public ResponseEntity find(String user)

.....

return ResponseEntity.ok(new ResponseDto(list, null));

当 Hazelcast 尝试保存在缓存中时: 异常:无法序列化 'org.springframework.http.ResponseEntity

ResponseEntity 不可序列化

有什么想法吗? 提前致谢。

【问题讨论】:

【参考方案1】:

要回答你的问题,你基本上有两种选择:

将序列化策略更改为不需要更改类层次结构(因为您不能)例如 JSON 序列化 考虑是否要序列化ResponseEntity,或者更可能是您可以制作Serializable 的底层DTO

但问题是,我不明白你是如何缓存的,或者从哪里缓存,甚至为什么。为了以最好的方式帮助您,请记住先定义上下文,然后说明您尝试通过缓存解决的问题,然后才能描述您如何实现缓存以及异常。

例如,在您的问题中,我推断您使用的是 Spring,但我不知道是哪个版本,是否是 Spring Boot,您有哪些依赖项等。

【讨论】:

嗨,首先,谢谢!对不起,这是我第一次在这里问。我正在使用 java 11,spring boot 2.1.6.RELEASE,我正在使用 spring 缓存和 hazelcast,我只是想将响应保存在缓存中。但我在尝试混合这两种技术时遇到了几个问题。 我假设你想创建一个页面缓存,以 URL 作为键,ResponseEntity 作为内容。对吗? 没错,但似乎 ResponseEntity.ok(包 org.springframework.http;)不是序列化的候选对象 回到我最初的回答。为什么要缓存 ResponseEntity 而不是 DTO 本身?或者您可以更改默认的序列化机制(参见docs.hazelcast.org/docs/latest/manual/html-single/…) 因为我无法更改任何其他内容,服务或其类,我必须添加缓存,但我无法更改响应或已使用的类中的任何行,这就是为什么我可以更改控制器中使用的唯一类及其 ResponseEntity 类。

以上是关于无法序列化“org.springframework.http.ResponseEntity”HazelcastCache的主要内容,如果未能解决你的问题,请参考以下文章

ivy 无法解析 org.springframework 依赖项

nested exception is org.springframework.core.serializer.support.SerializationFailedException异常解决

nested exception is org.springframework.core.serializer.support.SerializationFailedException异常解决

nested exception is org.springframework.core.serializer.support.SerializationFailedException异常解决

无法创建 [org.springframework.orm.jpa.SharedEntityManagerCreator] 类型的内部 bean '(inner bean)'?

无法访问 org.springframework.context.ConfigurableApplicationContext 类文件