Mapの値のリストとしてMapであるプロパティをシリアル化するにはどうすればよいですか?私はゲッターの@JsonSerialize(using=...)
注釈を使って他の簡単な変換を行うことができました。しかし、私がしたいことが存在するかどうかはわかりません。Jacksonを使用してリストをリストとしてシリアル化する方法
8
A
答えて
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")));
}
}
3
私はデフォルトを使用して実装シリアライザは、文字列だけではない値を処理します。
@Override
public void serialize(final Map<Long, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException,
JsonProcessingException {
provider.defaultSerializeValue(value.values(), jgen);
}
EDIT:Radu Simionescuが述べたように、このソリューションはPojosのマップでのみ機能します。
はい、あなたはそうしているかもしれませんが、あなたのケースでは機能しているかもしれませんが、マップやコレクションでは機能しませんが、pojosでのみ機能します。残念なことにprovider.defaultSerializeMapはありません –