2015-01-31 21 views
8

Gerçekten bu sorunu çözmede algılama am karmaşıklık derecesi ile mücadele ediyorum. başlık diyor: 4 boşluk PrettyPrinter ile ObjectMapper her Jackson oluşturmak için basit bir yolu nedir ?Bir Jackson ObjectMapper'da girinti aralığını yapılandırmanın en kolay yolu nedir?

Bonus puan: Nasıl değiştirebilir olabilir birObjectMapper oldukça baskı 4 alanlarda yapmak için mevcut?

objectMapper.enable(SerializationFeature.INDENT_OUTPUT); 

Ancak bu sadece DefaultPrettyPrinter sağlayan, 2 boşluk vardır:

Araştırmalarım sonucunda

, ben basit yolu genellikle Eşleştiricisi'hangi INDENT_OUTPUT ayarlamaktır oldukça yazdırmayı etkinleştirmek için olduğunu tespit ettik girinti. Ben kendi ObjectMapper inşa etmek var gibi 4 boşluk yapan bir PrettyPrinter olan bir JsonGenerator ile JsonFactory sağlayarak, öyle görünüyor ki, 4. Bunu yapmak için istiyoruz. Diğer platformlarda bu kadar basit olan bir şey için bu çok yoğun. Lütfen bana daha basit bir yol olduğunu söyle.

+0

Bu serin bir sorundur. Sadece meraklı, bu davranış tamamen kozmetik nedenlerden dolayı mı yoksa aslında 4 boşluk girinti kullanmanız gereken bir kısıtlama var mı? –

+0

Yansıma ile birlikte birşeyler yazmayı denedim ve muhtemelen esprili olmadığına karar verdim. Bence bu fikrin, beceriksizliğin ardında olduğunu düşünüyorum: yapılandırmanızın ne kadar karmaşık olması gerekse de, aynı derecede karmaşıktır. Küresel olarak mevcut haritanızda (sadpanda) –

+0

Merhaba Sam'e uygulamak için Jackson tarafından belirtilen yöntemi izlemeniz gerekecektir. Bunu düşündüğün için teşekkürler. Bence benim için kullanim kisitlama kisimlari kozmetik ile pratik birlestiriyor. Toplaniyor: Tinkerpop3'te bulunan GraphSON modülünü kullanarak bir grafinin içerigini kaydetmeye calisiyordum. Çok fazla girinti olduğunda, JSON günlük kaydı hata ayıklamadır. İşte asıl soru: http://stackoverflow.com/questions/28255878/can-i-customize-a-jackson-objectmapper-by-adding-a-module –

cevap

9

Bu, en basit yolunun olup olmadığından emin değilim ... ObjectMapper'u özel bir yazıcıyla kullanabilirsiniz. Girinti davranışını değiştirirseniz, DefaultPrettyPrinter kullanılabilir.

// Create the mapper 
ObjectMapper mapper = new ObjectMapper(); 

// Setup a pretty printer with an indenter (indenter has 4 spaces in this case) 
DefaultPrettyPrinter.Indenter indenter = 
     new DefaultIndenter(" ", DefaultIndenter.SYS_LF); 
DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); 
printer.indentObjectsWith(indenter); 
printer.indentArraysWith(indenter); 

// Some object to serialize 
Map<String, Object> value = new HashMap<>(); 
value.put("foo", Arrays.asList("a", "b", "c")); 

// Serialize it using the custom printer 
String json = mapper.writer(printer).writeValueAsString(value); 

// Print it 
System.out.println(json); 

çıkışı olacaktır:

{ 
    "foo" : [ 
     "a", 
     "b", 
     "c" 
    ] 
} 
+0

Teşekkür ederim. Burada işaret ettiğin birkaç şeyi özlemiştim. –

+0

'mapper.setDefaultPrettyPrinter (yazıcı);' bu yazıda özel yazıcıyı nesne eşleştiriciniz için varsayılan olanı yapmak için kullanabilirsiniz. Hala mapper.enable (SerializationFeature.INDENT_OUTPUT) 'aracılığıyla girmeyi etkinleştirmeniz gerekiyor. – Towler

İlgili konular