cry*_*sis 6 java serialization android jackson
我有一个Model对象组
public class Group {
String title;
List<User> members;
String createdBy;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Jackson来序列化这个对象.而不是序列化列表"成员"中的整个用户对象,我想序列化只是user.getTitle()字段.基本上我想要HashMap就像
{
"title" : "sometitle"
"members" : [user1.getTitle(), user2.getTitle()]
}
Run Code Online (Sandbox Code Playgroud)
我为此编写了一个自定义序列化器
public class GroupSerializer extends JsonSerializer<Circle> {
@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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如何仅序列化List的字段而不是整个用户对象?
Hen*_*sen 14
我建议您查看Jackson的Converter界面,这似乎比创建自定义序列化程序更适合任务.
一种方法是创建Converter实例并将其添加到实例中ObjectMapper,以便将其用于所有User实例的序列化.
public class UserConverter extends StdConverter<User, String> {
@Override
public String convert(User user) {
return user.getTitle();
}
}
Run Code Online (Sandbox Code Playgroud)
注册ObjectMapper就像这样:
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(User.class, new StdDelegatingSerializer(new UserConverter()));
ObjectMapper om = new ObjectMapper().registerModule(simpleModule);
Run Code Online (Sandbox Code Playgroud)
如果您不想将所有User实例转换为String,另一种方法是使用如下转换器注释所选属性:
public class Group {
String title;
@JsonSerialize(converter = ListUserConverter.class)
List<User> members;
String createdBy;
}
Run Code Online (Sandbox Code Playgroud)
并有一个相应的转换器看起来像这样:
public class ListUserConverter extends StdConverter<List<User>, List<String>> {
@Override
public List<String> convert(List<User> users) {
return users.stream().map(User::getTitle).collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7943 次 |
| 最近记录: |