JSON 객체를 만들 때 Jackson 라이브러리를 사용하고 있지만 mapper.writeValue (System.out, responseData) 함수를 사용하면 프로그램이 종료됩니다.Java 프로그램이 ObjectMapper.writeValue (System.out, responseData) 이후에 종료 됨 - 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();
}
}.
}
이 실행 된 후, 콘솔 쇼 { "ID가": 1}하지만, "완료"표시되지 않습니다 여기 내 코드입니다.
이것은 버그가 아니며, 기능입니다. 기본적으로 OutputStream은 고수준의 ObjectMapper.writeValue() 메소드를 사용할 때 실제로 닫힙니다. 그러나 실제 문제에 대한 좋은 설명. 동작을 원하지 않으면 ObjectMapper에서 해당 기능 ('JsonGenerator.Feature.AUTO_CLOSE_TARGET')을 비활성화 할 수 있습니다 :'mapper.disable (JsonGenerator.Feature.AUTO_CLOSE_TARGET)' – StaxMan
비활성화 메서드의 다른 오버로드 된 버전이 유용 할 것으로 보입니다. 현재 JsonGenerator.Feature를 사용하는 메소드는 없습니다. –
확인. 예,'mapper.configure (JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)'가있을 것입니다 만, 빠져있는 경우는, 편의적 메소드도 추가 할 필요가 있습니다. – StaxMan