当前位置:  开发笔记 > 编程语言 > 正文

自定义序列化程序,用于序列化List <String>中的List <User>

如何解决《自定义序列化程序,用于序列化List<String>中的List<User>》经验,为你挑选了1个好方法。

我有一个Model对象组

public class Group {
    String title;
    List members;
    String createdBy;
}

我正在使用Jackson来序列化这个对象.而不是序列化列表"成员"中的整个用户对象,我想序列化只是user.getTitle()字段.基本上我想要HashMap就像

{
  "title" : "sometitle"
  "members" : [user1.getTitle(), user2.getTitle()]
}

我为此编写了一个自定义序列化器

public class GroupSerializer extends JsonSerializer {

    @Override
    public void serialize(Group value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {

        if(value != null) {
            gen.writeStartObject();
            gen.writeStringField("title", value.getTitle());
            gen.writeStringField("createdBy", value.getCreatedBy());
            gen.writeFieldName("members");
            gen.writeStartArray();
            for(User user : value.getMembers()) {
                gen.writeString(user.getEmail());
            }
            gen.writeEndArray();
            gen.writeEndObject()
        }
   }
}

但它不起作用.如何仅序列化List的字段而不是整个用户对象?



1> Henrik Aaste..:

我建议您查看Jackson的Converter界面,这似乎比创建自定义序列化程序更适合任务.

一种方法是创建Converter实例并将其添加到实例中ObjectMapper,以便将其用于所有User实例的序列化.

public class UserConverter extends StdConverter {
    @Override
    public String convert(User user) {
        return user.getTitle();
    }
}

注册ObjectMapper就像这样:

SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(User.class, new StdDelegatingSerializer(new UserConverter()));

ObjectMapper om = new ObjectMapper().registerModule(simpleModule);

如果您不想将所有User实例转换为String,另一种方法是使用如下转换器注释所选属性:

public class Group {
    String title;
    @JsonSerialize(converter = ListUserConverter.class)
    List members;
    String createdBy;
}

并有一个相应的转换器看起来像这样:

public class ListUserConverter extends StdConverter, List> {
    @Override
    public List convert(List users) {
        return users.stream().map(User::getTitle).collect(Collectors.toList());
    }
}

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有