2012-06-19 31 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 –