ObjectOutputStream:在字符串开头附加问号

ObjectOutputStream: appending question marks at the beginning of the String

Server(Java) 向客户端 (TypeScript) 发送一个 Json 字符串。在客户端我得到以下信息:

因此 JSON.parse() 由于附加了问号而失败。

我试过了:

  1. 正在将内容类型设置为 - "text/html"
  2. 将编码设置为 - "UTF-8"

似乎没有什么可以删除这些。

我的代码:

public class objectOutput {

    static int i=0;
    ObjectOutputStream objectOutputStream;

    public objectOutput(HttpServletResponse response)  throws IOException {

        response.setContentType("application/octet-stream");
        objectOutputStream = new ObjectOutputStream(response.getOutputStream());  

    }

    // Using this method to write a Json String
    public void writeObject(Object object) throws IOException {

        objectOutputStream.writeObject(object);
        objectOutputStream.close();
        objectOutputStream.flush();       
    }
}

基本上,如果您只是想发送文本,则不应使用 ObjectOutputStream。这不是它的目的。 ObjectOutputStream 以 Java 特定格式对任意可序列化对象执行二进制序列化。应该只在代码读取数据也是Java时使用,使用ObjectInputStream.

在这种情况下,您可能应该只调用 response.getWriter(),或者自己在 response.getOutputStream() 周围创建一个 OutputStreamWriter。 (这里通常首选使用 getWriter() - 该调用的全部意义在于为文本响应创建编写器。)

内容类型与此问题无关,但 you should probably change that to application/json

能否尝试使用 json 格式,如下所示:

public class objectOutput {

static int i=0;
PrintWriter pw;

public objectOutput(HttpServletResponse response)  throws IOException {

    response.setContentType("application/json");
    pw = response.getWriter();  

}

// Using this method to write a Json String
public void writeObject(Object object) throws IOException {

    pw.print(object);
    pw.flush();      
    pw.close(); 
}

}