Java-программа, завершающаяся после ObjectMapper.writeValue (система.out, responseData) - библиотека Джексона
Я использую библиотеку Джексона для создания объектов JSON, но когда я использую mapper.writeValue (система.out, responseData) функция, программа завершается. Вот мой код:
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();
}
}.
}
После этого выполнения консоль показывает {"id": 1}, но не показывает "done".
2 ответа:
Проблема заключается в реализации Джексона, как ObjectMapper._configAndWriteValue вызывает UtfGenerator.close (), который вызывает PrintStream.закрывать().
Я бы зарегистрировал проблему в https://jira.codehaus.org/browse/JACKSON
Чтобы изменить поведение цели по умолчанию, вы можете сделать следующее:
mapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);