【发布时间】:2016-06-13 23:25:42
【问题描述】:
我需要从 redis 保存和加载对象。
该对象包含作为接口的 GrantedAuthority 列表(除其他外):
public class UserAccountAuthentication implements Authentication {
private List<GrantedAuthority> authorities;
private boolean authenticated = true;
...
}
Jackson 成功序列化对象但未能反序列化它,出现以下异常:
abstract types can only be instantiated with additional type information
我知道我可以通过添加来指定类型:
@JsonTypeInfo(
但是在这种情况下我不能这样做,因为GrantedAuthority是Spring的接口,我无法更改它。
序列化的json是:
{
"authorities": [
{
"authority": "ROLE_NORMAL_USER"
}
],
"authenticated": true,
"securityToken": {
"expiration": 1458635906853,
"token": "sxKi3Pddfewl2rgpatVE7KiSR5qGmhpGl0spiHUTLAAW8zuoLFE0VLFYcfk72VLnli66fcVmb8aK9qFavyix3bOwgp1DRGtGacPI",
"roles": [
"ROLE_NORMAL_USER"
],
"expired": false,
"expirationDateFormatted": "2016-03-22 08:38:26.853 UTC"
},
"name": "admin",
"expired": false
}
摘要GrantedAuthority仅填充SimpleGrantedAuthority。
所以我尝试了:
objectMapper.registerSubtypes(SimpleGrantedAuthority.class);
仍然没有运气。
【问题讨论】:
-
你看看你的getter和setter写得是否正确吗?
-
没有 getter 和 setter,它是对象内部使用的私有列表。