杰克逊:将字符串数组反序列化为列表< T> [英] Jackson: deserialize array of Strings to List<T>

查看:101
本文介绍了杰克逊:将字符串数组反序列化为列表< 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");
    }
}

这篇关于杰克逊:将字符串数组反序列化为列表&lt; T&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆