【问题标题】:StreamCorruptedException: invalid stream header:StreamCorruptedException:无效的流标头:
【发布时间】:2012-04-03 03:22:00
【问题描述】:

我收到了 StreamCorruptedException,但我不知道它为什么或如何发生。 任何帮助都是极好的! 这是客户端:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
Map params = new HashMap<String, Object>();     
Order[] orders = odao.getOpenOrdersByTenant(tenantID);

JSONObject jObj = new JSONObject();
jObj.put("params", params);
jObj.put("sourcePath", System.getProperty("user.dir") + "/reports/OpenOrders.jasper");
jObj.put("method", "html");
jObj.put("datasource", orders);

ClientResponse response =       service.path("rest").path("jasper").path("getJasperReport").type(MediaType.APPLICATION_JSON).post(ClientResponse.class,jObj);

服务器:

@POST
@Path("/getJasperReport")
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_JSON)
public void getJasperReport(@Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse, @Context UriInfo uriInfo )
                throws ServletException, IOException{

ObjectInputStream objInputStream = new ObjectInputStream(servletRequest.getInputStream());
JSONObject jobj =  (JSONObject) objInputStream.readObject();         

倒数第二行抛出 java.io.StreamCorruptedException: invalid stream header: 7B227061

【问题讨论】:

    标签: java json rest httpwebrequest jersey


    【解决方案1】:

    ObjectInputStream 用于读取 java 序列化数据,而不是 JSON 格式的数据。

    你可能想要new JSONObject(new JSONTokener(servletRequest.getReader()))之类的东西。

    【讨论】:

    • 那么我该如何抽象出我的请求实体呢?还是有更好的方法来解决这个问题?
    • 仍然有问题。我现在收到一个非法状态异常,告诉我 GetInputStream 已被调用。
    • @Garvice - 您当前的代码是什么样的?您是否删除了之前对 getInputStream 的调用?
    • 这就是问题所在。之前没有任何对 getInputStream 的调用...第一个调用是 getReader()
    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多