Sto usando la libreria di Jackson per creare oggetti JSON, ma quando uso la funzione mapper.writeValue (System.out, responseData), il programma termina. Ecco il mio codice:Programma Java che termina dopo ObjectMapper.writeValue (System.out, responseData) - Jackson Library
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class Test {
public static void main(String[] args){
new Test().test();
}
public void test() {
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> responseData = new HashMap<String, Object>();
responseData.put("id", 1);
try {
mapper.writeValue(System.out, responseData);
System.out.println("done");
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}.
}
Dopo questo viene eseguito, gli spettacoli console { "id": 1}, ma non mostra "fatto".
Non è un bug, è una funzionalità: per impostazione predefinita, OutputStream è effettivamente chiuso quando si utilizzano metodi ObjectMapper.writeValue() di alto livello. Ma buona spiegazione del problema attuale. È possibile disabilitare tale funzione ('JsonGenerator.Feature.AUTO_CLOSE_TARGET') su ObjectMapper, se non si desidera un comportamento:' mapper.disable (JsonGenerator.Feature.AUTO_CLOSE_TARGET) ' – StaxMan
Sembra che sia disponibile un'altra versione sovraccaricata del metodo disable. Attualmente non ce n'è uno che prenda JsonGenerator.Feature. –
Ok. Sì, ci dovrebbe quindi essere 'mapper.configure (JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)' ma concesso dovrebbe anche aggiungere metodi di convenienza se mancano. – StaxMan