Estoy usando la biblioteca Jackson para crear objetos JSON, pero cuando uso la función mapper.writeValue (System.out, responseData), la programa termina. Aquí está mi código:Programa Java que termina después de ObjectMapper.writeValue (System.out, responseData) - Biblioteca Jackson
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();
}
}.
}
Después de esto se ejecuta, los espectáculos de la consola { "id": 1}, pero no muestra "hecho".
No es un error, es una función: de manera predeterminada, OutputStream se cierra al utilizar métodos ObjectMapper.writeValue() de alto nivel. Pero una buena explicación del problema real. Puede desactivar esa característica ('JsonGenerator.Feature.AUTO_CLOSE_TARGET') en ObjectMapper, si el comportamiento no es deseado:' mapper.disable (JsonGenerator.Feature.AUTO_CLOSE_TARGET) ' – StaxMan
Parece que otra versión sobrecargada del método de desactivación sería útil. Actualmente, no hay uno que tome un JsonGenerator.Feature. –
Ok. Sí, debería haber 'mapper.configure (JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)', pero también debería agregar métodos de conveniencia si faltan. – StaxMan