如何将作为 Map 的属性序列化为 Map 值的列表?我已经能够使用@JsonSerialize(using=...)
getter 上的注释进行其他简单的转换。但是,我不确定是否存在我想做的事情。
问问题
7527 次
2 回答
7
我们需要类似的东西,在我们的例子中,我们使用了@JsonSerialize
你评论的自定义,这很简单:
public class MyCustomSerializer extends JsonSerializer<Map<?, ?>> {
@Override
public void serialize(final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeObject(value.values());
}
}
使用它的代码:
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class JacksonTest {
public static class ModelClass {
private final Map<String, String> map;
public ModelClass(final Map<String, String> map) {
super();
this.map = map;
}
@JsonSerialize(using = MyCustomSerializer.class)
public Map<String, String> getMap() {
return map;
}
}
public static void main(final String[] args) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(System.out, new ModelClass(Collections.singletonMap("test", "test")));
}
}
于 2012-06-19T17:56:24.553 回答
3
我使用默认的 Serializer实现了处理不仅仅是 String 的值:
@Override
public void serialize(final Map<Long, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException,
JsonProcessingException {
provider.defaultSerializeValue(value.values(), jgen);
}
编辑:正如 Radu Simionescu 所述,此解决方案仅适用于 Pojos 地图。
于 2013-01-10T11:16:06.577 回答