杰克逊:将字符串数组反序列化为列表< T> [英] Jackson: deserialize array of Strings to List<T>
问题描述
对于JSON对象,主题
:
{
"permissions":["foo", "bar"],
...
}
...我想反序列化为:
... I would like to deserialize to:
class Subject {
private List<Permission> permissions;
...
...其中权限
是:
class Permission {
....
public Permission(String permission) {
....
}
权限
不是我控制的类,所以我只有构造函数来处理。
Permission
is not a class I control, so I only have the constructor to deal with.
我确定杰克逊可以做到这一点但是我我只是不相信我找到了最好的方法。我在 ArrayDeserializer
和 @JsonDeserialize(contentAs = Permission.class)
的努力失败了,在我开始继承<$ c $之前c $ c> JsonDeserializer 我想验证没有内置功能可以做到这一点。
I'm certain Jackson can do this but I'm just not convinced I have found the best way yet. My efforts with ArrayDeserializer
and @JsonDeserialize(contentAs = Permission.class)
have failed and before I start subclassing a JsonDeserializer
I want to verify that no built in functionality can do this.
推荐答案
写完我自己的反序列化器。
Ended up writing my own Deserializer.
public class PermissionDeserializer extends JsonDeserializer<List<Permission>> {
@Override
public List<Permission> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {
List<Permission> permissions = new ArrayList<>();
while(jsonParser.nextToken() != JsonToken.END_ARRAY) {
permissions.add(new Permission(jsonParser.getValueAsString()));
}
return permissions;
}
throw deserializationContext.mappingException("Expected Permissions list");
}
}
这篇关于杰克逊:将字符串数组反序列化为列表< T>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!