2012-06-19 35 views

回答

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

编辑:正如Radu Simionescu所述,此解决方案仅适用于Pojos地图。

+0

是的,你做了,它可能适用于你的情况,但它不适用于地图和集合,但只适用于pojos。不幸的是没有provider.defaultSerializeMap –