Java 程序在 ObjectMapper.writeValue(System.out, responseData) 之后终止 - Jackson Library

2022-09-03 02:04:13

我正在使用 Jackson 库来创建 JSON 对象,但是当我使用 mapper.writeValue(System.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},但不显示“完成”。


答案 1

问题在于Jackson实现,因为ObjectMapper._configAndWriteValue调用UtfGenerator.close(),它调用PrintStream.close()。

我会在 https://jira.codehaus.org/browse/JACKSON

要更改目标关闭的默认行为,可以执行以下操作:

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

答案 2

在数据文件/getter 文件中声明变量名称时,第一个字母应为小。