2012-06-19 16 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); 
} 

EDIT:Radu Simionescuが述べたように、このソリューションはPojosのマップでのみ機能します。

+0

はい、あなたはそうしているかもしれませんが、あなたのケースでは機能しているかもしれませんが、マップやコレクションでは機能しませんが、pojosでのみ機能します。残念なことにprovider.defaultSerializeMapはありません –