How to Serialize a Map as List using Jackson

前端 未结 2 729
小蘑菇
小蘑菇 2021-01-04 13:16

How can I serialize a property which is a Map as a List of the Map\'s values? I\'ve been able to do other simple conversions using the @JsonSerialize(using=...)

相关标签:
2条回答
  • 2021-01-04 13:39

    I implemented using default Serializer to handle values that are not just String :

    @Override
    public void serialize(final Map<Long, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException,
                JsonProcessingException {
       provider.defaultSerializeValue(value.values(), jgen);
    }
    

    EDIT : As mentioned by Radu Simionescu this solution only works for Maps of Pojos.

    0 讨论(0)
  • 2021-01-04 13:46

    We needed something similar, in our case we used a customized @JsonSerialize as you commented, and it was stupid simple:

    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());
        }
    }
    

    Code using it:

    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")));
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题