【发布时间】:2016-08-02 00:51:19
【问题描述】:
我正在使用Gson 反序列化一些由http 标头传入的json 字符串(实际上是jwt)。 json 包含:
[
{"authority":"a1"},
{"authority":"a2"},
{"authority":"a3"},
.
.
.
{"authority":"a4"},
]
在JsonElement。
我希望将上述部分反序列化到字段中(在某些类中):
Set<GrantedAuthority> authorities
GrantedAuthority 是 Spring 的一个接口,它有一个实现 SimpleGrantedAuthority。 SimpleGrantedAuthority 有一个接受字符串的构造函数:
public SimpleGrantedAuthority(String au) {this.au = au}
为了反序列化json,我需要Gson知道接口GrantedAuthority的实现类。我正在尝试:
public class GrantedAuthorityInstanceCreator implements InstanceCreator<GrantedAuthority> {
@Override
public GrantedAuthority createInstance(Type type) {
// no such constructor
GrantedAuthority ga = new SimpleGrantedAuthority();
return ga;
}
}
但由于SimpleGrantedAuthority 没有无参数构造函数,我需要为构造函数提供一个参数。我怎样才能做到这一点?
【问题讨论】:
-
描述与标题有何关系?你想达到什么目的?
-
@waltersu 我想将 json 字符串反序列化到该字段中,但它是一个接口类型,我不知道如何编程 gson 以使用实现
SimpleGrantedAuthority实例化该接口 -
为什么不将它们反序列化为
SimpleGrantedAuthority,自己创建Set<GrantedAuthority>,放入集合中呢? -
@waltersu json 字符串还有很多其他字段,
Set<GrantedAuthority>也只是我想反序列化成的类的一个字段。我不认为我可以先反序列化其他字段然后组成Set<GrantedAuthority>字段,因为只有一个构造函数可以实例化所有字段。