Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
然后,我尝试使用Jackson API两次解析json输入流,得到一个java.io.EOFException_Java_Json_Exception_Serialization_Jackson - Fatal编程技术网

然后,我尝试使用Jackson API两次解析json输入流,得到一个java.io.EOFException

然后,我尝试使用Jackson API两次解析json输入流,得到一个java.io.EOFException,java,json,exception,serialization,jackson,Java,Json,Exception,Serialization,Jackson,My ParserCheck.java:- import java.io.IOException; import java.io.InputStream; import org.apache.commons.io.IOUtils; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jack

My ParserCheck.java:-

import java.io.IOException;
import java.io.InputStream;        
import org.apache.commons.io.IOUtils;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class ParserCheck {

    public static void main(String[] args){
        ObjectMapper objectMapper = new ObjectMapper();

        String responseJson = "{\"status\":\"200\",\"message\":\"Success\"}";
        InputStream streamResponse = IOUtils.toInputStream(responseJson);

        try {
            MyJsonResponse response = objectMapper.readValue(streamResponse, MyJsonResponse.class);
            System.out.println(response);
        } catch ( JsonParseException | JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }

        try {
            MyJsonResponse response = objectMapper.readValue(streamResponse, MyJsonResponse.class);
            System.out.println(response);
        } catch ( JsonParseException | JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }finally{
            try {
                streamResponse.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
My JsonResponse.java:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;

import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonIgnoreProperties(ignoreUnknown=true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class MyJsonResponse {
    @JsonProperty
    private Integer status;

    @JsonProperty
    private String message;

    public Integer getStatus() {
        return status;
    }

    public String getMessage() {
        return message;
    }

    @Override
    public String toString(){
        return "Json Response [Status ="+ status +", Message =" + message + " ]";
    }

}
我第一次得到正确的输出,但第二次得到异常。 这是输出:

Json Response [Status =200, Message =Success ]java.io.EOFException: No content to map to Object due to end of input
    at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2775)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1909)
    at.service.provider.ParserCheck.main(ParserCheck.java:33)

在这种情况下应该怎么做。我尝试在第一次输出后关闭流,但它仍然给我一个异常。

您正在重用流。第一次打电话给

objectMapper.readValue(streamResponse, MyJsonResponse.class);
将流读到底,因此当您第二次调用它时,流没有更多的内容。例如

stremResponse.read() returns -1
您使用流有什么原因吗?我试过:

            MyJsonResponse response = objectMapper.readValue(responseJson, MyJsonResponse.class);

这与预期的效果一样。

我也将在其他方法中使用它,我的响应(POJO)中将包含更多字段,而不仅仅是状态和消息,其他字段也将在其中使用。我最终通过重置流(streamResponse.reset())找到了解决方案。正如您所说,流没有更多的内容可阅读,因此现在有意义了。谢谢