10

Map であるプロパティを Map の値のリストとしてシリアル化するにはどうすればよいですか? @JsonSerialize(using=...)ゲッターの注釈を使用して、他の単純な変換を行うことができました。しかし、私がやりたいことのために存在するかどうかはわかりません。

4

2 に答える 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

String だけではない値を処理するために、デフォルトの Serializerを使用して実装しました。

@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 が述べたように、このソリューションは Map of Pojos でのみ機能します。

于 2013-01-10T11:16:06.577 に答える