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 14

2 ответа:

Проблема заключается в реализации Джексона, как ObjectMapper._configAndWriteValue вызывает UtfGenerator.close (), который вызывает PrintStream.закрывать().

Я бы зарегистрировал проблему в https://jira.codehaus.org/browse/JACKSON

Чтобы изменить поведение цели по умолчанию, вы можете сделать следующее:

mapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);

При объявлении имен переменных в файлах данных / файлах геттеров первая буква должна быть маленькой.