2012-06-19 22 views
8

का उपयोग कर सूची के रूप में मानचित्र को क्रमबद्ध करने के लिए कैसे करें मैप के मूल्यों की सूची के रूप में मानचित्र को एक संपत्ति को क्रमबद्ध कैसे कर सकता हूं? मैं गेटटर पर @JsonSerialize(using=...) एनोटेशन का उपयोग करके अन्य सरल रूपांतरण करने में सक्षम हूं। हालांकि, मुझे यकीन नहीं है कि कोई ऐसा करने के लिए मौजूद है जो मैं करना चाहता हूं।जैक्सन

उत्तर

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

मैं डिफ़ॉल्ट का उपयोग कर कार्यान्वित Serializer उन मानों को संभालने के लिए जो केवल स्ट्रिंग नहीं हैं:

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

संपादित करें: जैसा कि राडू सिमियोनसेकू द्वारा उल्लिखित है, यह समाधान केवल पोजोस के मानचित्रों के लिए काम करता है।

+0

हाँ, आपने किया, और यह आपके मामले में काम कर सकता है, लेकिन यह नक्शे और संग्रह के साथ काम नहीं करता है, लेकिन केवल pojos के साथ। दुर्भाग्यवश कोई प्रदाता.defaultSerializeMap नहीं है –