Tôi đang sử dụng thư viện Jackson để tạo các đối tượng JSON, nhưng khi tôi sử dụng hàm mapper.writeValue (System.out, responseData), chương trình chấm dứt. Đây là mã của tôi:Chương trình Java chấm dứt sau khi ObjectMapper.writeValue (System.out, responseData) - Thư viện 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();
}
}.
}
Sau khi thực hiện, bảng điều khiển hiển thị {"id": 1}, nhưng không hiển thị "đã hoàn tất".
Đó không phải là lỗi, tính năng của nó - theo mặc định OutputStream thực sự bị đóng khi sử dụng các phương thức ObjectMapper.writeValue() mức cao. Nhưng giải thích tốt về vấn đề thực tế. Bạn có thể vô hiệu hóa tính năng đó ('JsonGenerator.Feature.AUTO_CLOSE_TARGET') trên ObjectMapper, nếu hành vi không mong muốn:' mapper.disable (JsonGenerator.Feature.AUTO_CLOSE_TARGET) ' – StaxMan
Dường như một phiên bản quá tải khác của phương thức vô hiệu hóa sẽ có ích. Hiện tại, không có cái nào có tính năng JsonGenerator.Feature. –
Ok. Vâng, sau đó sẽ có 'mapper.configure (JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)' nhưng được cấp nên thêm các phương thức thuận tiện nếu chúng bị thiếu. – StaxMan